PowerShell随笔1
$a = 1..100
脚本双击直接运行:
ftype Microsoft.PowerShellScript.1="C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe" -command "& {%1}"
assoc .ps1=Microsoft.PowerShellScript.1
更改脚本执行策略:
set-executionpolicy remotesigned
Write-Host "Success" 输出,可以通过vbs调用powerShell脚本隐藏窗口
在命令提示符下运行ps命令方法:
powershell.exe get-childitem
运行变量中存储的命令:
$command = "Get-Process"
invoke-expression $command
单步调试,一行一行执行命令
set-psDebug -step set-psDebug -off
系统变量:$env:temp $env:OS
Get-ChildItem $env:temp
延时100秒
Start-Sleep -Seconds 100
连接字符串
$c = $a + " and " + $b
输出计算过程
$a=2;$b=3
write-host $a + $b = ($a+$b)
数组转换为字符串
$a=1,2,3
$b=[string]$a
结果显示:1,2,3
$a=1,2,3
[String]::Join("GB+",$a)+"GB"
结果显示:1GB+2GB+3G
$j=${d:\res.txt} #等价于get-content
"notepad.exe" -like "notepad.???" ##一个?代表一个字符,单字符匹配
返回数组每个值类型
$m|%{$_.gettype()}
$array[-1] #最后一个元素
$array[-2] #倒数第二个元素
$array[1][2] #对二维数组进行索引
$array[20..2]
$array[-2..-20]
1,2,3,4|%{$_}
gwmi win32_computersystem|%{$_.name} #无标题
$t = gwmi win32_computersystem|format-table name -HideTableHeaders |Out-String
$t.trim() #输出无空行,去除空格 trimstart(),trimend()
在使用$a的时候,可以先强制转换类型[array]$a
$a.count的时候,需要先判断 $a.gettype().isarray 是否为True&False,如果为False,则$a.count为$null
统计字符、单词和行数:
Get-content c:\test.txt |measure-object -character -word -line
创建数组,注意get-process
$myarray=@(5;"This";get-process)
$myarray[2]
$myarray.length 是87,不是3
创建临时文件:
$tempFile = [io.path]::getTempFIleName()
打开wmi:wbemtest
查找相关命令:
get-command -name *process
get-command -name get*
Get-Command -Name Clear-Host
查看wmi对象
get-wmiObject -list -namespace “root\CIMV2″
get-wmiobject -list "*adapter*"
gwmi
gwmi win32_networkadapter |get-member
gwmi Win32_NetworkAdapterConfiguration |where {$_.description -like "broad*"}
$j = gwmi Win32_NetworkAdapterConfiguration |where {$_.description -like "broad*"} |select ip
$j.address 此处还有问题
(Get-WmiObject Win32_operatingsystem).win32shutdown(0) #0注销,1关机,2重启
Restart-Computer -computername Server01,Server02
Stop-Computer 192.168.1.102 -force -Credential administrator
get-help get-process -examples,-full,-detailed
get-process |out-host -paging
help get-process; man get-process 分页显示帮助
help get-process -examples
获取对象的方法、属性、类型
get-service | get-member
获取该对象的属性
get-service | get-member -membertype *property
查看wsearch服务的显示名称、停止服务、查看服务状态
get-service -name wsearch
get-service | where-object {$_.Status -eq "Running"}
(get-service wsearch).displayname
(get-service schedule).stop()
(get-service wsearch).status
创建别名:
set-alias gh get-help 为get-help创建别名gh
set-alias np c:\windows\notepad.exe 为命令创建别名np
remove-item alias:gh 删除别名
输出格式:
get-service | format-list
(get-service wsearch)| format-list
get-service | format-table name, Servicetype, Canshutdown | out-file -filepath c:\a.txt
get-process | out-file -filepath c:\a.txt -append 追加
get-process -name xdict | format-table processname,id,cpu
get-process -name xdict | format-table processname,id,cpu -hidetableheaders #省略标题名称
$a |get-member |format-table -wrap #被截断的列分行显示
get-childitem |format-wide -property mode -column 1 $显示指定的某一列,-column指定以几列显示
直接导出到excel,可以分单元格显示
get-process | select name,cpu | export-csv d:\ww.csv -NoTypeInformation
编写函数:
function GMEX {get-help get-member -examples}
function bootini {notepad c:\boot.ini} == notepad c:\boot.ini
设定当前工作目录:
Set-Location -Path C:\Windows -PassThru
get-location
查看驱动器:
get-psdrive -psprovider filesystem | format-table name,root
get-psdrive -name d,e
添加新驱动器:
New-PSDrive -Name Office -PSProvider FileSystem -Root "C:\Program Files\Microsoft Office\OFFICE11"
remove-psdrive -name office
文件管理:
get-childitem -path d:\documents -recurse 递归列出该目录下所有项 -force 显示隐藏项
get-childitem -path c:\?.txt 查找只有一个字符的文件
Get-ChildItem -Path C:\Windows\x*
-exclude -include
新建文件夹:
new-item -path d:\jj -itemtype directory
新建文件:
new-item -path d:\jj\wt.txt -itemtype file
拆分路径,仅显示文件名:
split-path "c:\test\logs\*.log" -leaf -resolve
返回唯一值,必须先排序:
$a | sort-object desc | get-unique
分组排序:
get-childitem d:\*.* |group-object mode
get-childitem *.* #文件名.扩展名,都是文件
get-childitem * #包含目录,不完全是,注意
删除:
remove-item d:\jj -recurse 无提示直接删除
remove-item d:\port.txt 文件直接删除,无提示
复制:
copy-item -path d:\jj -destination c:\ 只复制空文件夹jj
copy-item -path d:\jj -destination e:\ -recurse 复制全部内容
copy-item -path d:\jj -destination c:\ -recurse -force 覆盖复制
移动文件夹:
Move-Item -Path C:\temp\NewDirectory -Destination C:\ -PassThru
查找修改时间晚于2012/10/1的txt文件
get-childitem d:\*.txt | where-object {$_.lastwritetime -gt "2012/10/1"}
对test目录下的文件进行过滤,只显示txt格式文件,b开头除外,按lastwritetime降序排列
get-childitem e:\test\* -include *.txt -exclude b* |sort-object -property lastwritetime -desc
get-childitem e:\test\* |get-member 查看每个项都具有哪些属性、方法
get-childitem e:\test\* -name basename|get-member 查看每个项的属性都具有哪些属性、方法
get-childitem e:\test\* |select name
get-childitem e:\test\* |select {$_.name.length}
get-childitem e:\test\* |foreach {$_.name.length}
将name的属性length取出来,并将其作为列与name一同输出
get-childitem e:\test\* |select name,@{name="changdu";expression={$_.name.length}},lastwritetime |format-table -autosize
排序:使用“_”分割字符串,_前面的为[0],后面的为[1],并使用降序
get-childitem e:\test\* -include *.txt -exclude b* |sort-object {[int]$_.name.split("_")[1].substring(0,1)} -desc
wmi管理:
Get-WmiObject -List
get-wmiobject -list | where-object {$_.name -like "win32_*"} 查询win32开头的对象
get-wmiobject win32_localtime | get-member 查看属性、方法
Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName win7
Get-WmiObject -Class Win32_OperatingSystem -ComputerName win7
Get-WmiObject Win32_OperatingSystem -ComputerName win7
重命名文件:
Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt
get-wmiobject win32_operatingsystem | format-table version,serialnumber -autosize
get-wmiobject win32_operatingsystem | get-member -name *memory* 查询内存相关参数
get-wmiobject win32_operatingsystem | format-list freephysicalmemory,maxprocessmemorysize
筛选:
-eq,-ne,-lt,-le,-gt,-ge,-like,-notlike,-contains,-notcontains
1,2,3,4 | where-object -filterscript{$_ -lt 3} 筛选小于3的数字
1,2,3,4,5,6 | where-object -filterscript{($_ -lt 3) -or ($_ -gt 4)} 筛选小于3或大于4的数字
30000,56798,12432 | foreach-object -process {$_/1024} 对数组中每一个数除以1024
百分比格式化字符串
"{0:p}" -f 0.035655555
小数处理
"{0:#.###}" -f 3.4567 保留3位小数
(3.99999).tostring("f2") 保留2位小数
Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {($_.size)/1024.0/1024.0} 显示分区大小
get-wmiobject win32_logicaldisk | where-object -filterscript {$_.drivetype -eq 3} |format-table deviceid,freespace,size
$size=get-wmiobject win32_logicaldisk | where-object -filterscript {$_.drivetype -eq 3} | foreach-o
bject -process{($_.size)/1024/1024/1024}
$size | foreach-object -process {[int]($_)}
$size | foreach -process {(([int]$_).tostring() + "GB")} tostring()转换为字符串
$size | foreach -process {(($_).tostring("F2") + "GB")} tostring()转换为字符串,四舍五入保留2位小数
$size | foreach -process {("The size is:"+[int]$_+"GB")} 根据左操作数自动将其识别为字符串
Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript { ($_.State -eq "Running") -and ($_.StartMode -eq "Manual") } | Format-Table -Property Name,DisplayName
Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . |
Format-Table deviceid,@{Label="free(GB)"; Expression={$_.freespace/1024/1024/1024}},@{Label="size(GB)"; Expression={$_.size/1024/1024/1024}} -AutoSize | Out-String
显示年份日期:
(get-date).month
get-date -uformat "%Y%m%d" 不需要判断是否大于或小于10月,10日
new-item -path $wt -type dir 创建以当前日期为名的文件夹
单引号不转义,引号内是什么就输出什么;双引号转义,即可将变量通过双引号引起来,然后使用变量内容
tostring()转换为字符串,例:$s.tostring()
查看windows环境变量:
get-childitem env:
$env:computername
输入用户名密码:(powershell中不能直接写入密码)
$pass =get-credential win08r2\administrator
get-winevent -logname system -computername win08r2 -Credential $pass | where-object {$_.
id -eq 12 -and $_.timecreated -gt "2012/11/1 8:30:00"}
--查看计算机win08r2的系统日志--时间比较
查看该天的事件日志
get-winevent -logname system -computername win7 | where-object {$_.id -eq 12 -and $_.timecrea
ted.tostring().substring(0,9) -eq "2012/11/2"}
可以保存、清空事件日志
Get-WmiObject -Class Win32_NTEventLogFile
截取字符串,从右往左截取的话可以使用.length
$aa.substring(0,3)
查找扩展名为txt的文件
get-item e:\test\* |where{$_.name.tostring().split("."[1] -eq "txt"}
只列出扩展名
get-item e:\test\* |format-table @{name="aa";expression={$_.name.tostring().split(".")[1]}}
获取文件权限:
$j = get-childitem e:\wt.txt
通过 $j |get-member 查询可用方法
$j.getaccesscontrol()
$j.SetAccessControl()
设置文件属性:Set-ItemProperty
set-itemproperty -path c:\GroupFiles\final.doc -name IsReadOnly -value $true
get-childitem weekly.txt | set-itemproperty -name IsReadOnly -value $true
Set-ItemProperty e:\test\wt.txt isreadonly $false (不加$设置不成功,true不加可以设置成功)
measure-command 度量脚本运行时间
send-mailmessage
invoke-command
UNC路径判断:
$path = 'filesystem::\\127.0.0.1\c$'
Test-Path -Path $path
赋值给变量的同时输出到控制台
($a=get-process)
while循环
$i=0
while($i++ -lt 5)
{ if ($i+1 -eq 3){$i}}
#创建域账户
$user = [ADSI]"LDAP://CN=test01,OU=oo,OU=Admins,DC=ddv,DC=com"
$a="administrator"
$m = [ADSI]"WinNT://$env:computername/$a"
#重命名计算机
$cs = gw win32_computerysystem -computername $computer
$cs.rename($newName)
#查找已连接的网卡
gwmi win32_networkadapter -filter "NetConnectionStatus = 2"
#查找DNS服务器地址
gwmi Win32_NetworkAdapterConfiguration -filter "index = 7"|select DNSServerSearchOrder
gwmi win32_networkadapter -filter "NetConnectionStatus = 2"|foreach {gwmi Win32_NetworkAdapterConfiguration -filter "index = $($_.index)"|select DNSServerSearchOrder}
switch
# `t用于缩进(`thi)
write-host "`tmm"
#路径包含空格
c:\my `folder\myscript.ps1
&("c:\my folder\myscript.ps1")
#获得随机数
([random]5).next()
([random]5).next("1","10")
get-random
#获得所有注册到PS的管理单元列表
get-pssnapin -registered
#显示结果到控制台,并输出结果到文件
get-process |tee-object d:\test.txt
#显示16进制
"{0:x}" -f 1234
#未声明某个变量时显示错误信息
将 Set-PSDebug-strict 放在脚本中任何位置
将 $erroractionpreference=SilentlyContinue 放在脚本开头,可以让PS忽略错误并继续执行其余代码