注:更多命令详见
Get-Date
功能:获取一个DateTime对象,这个对象代表了当前的时间。
实例:
Get-Date
输出;
Tuesday, June 25, 2019 14:53:32
Get-Date -Format "dddd MM/dd/yyyy HH:mm K" #格式化输出
结果:
Tuesday 06/25/2019 16:17 -07:00 #结果是一个串对象
Get-Date -Format "yyyyMMddHHmmss" #结果形如20210713115516。
#可将结果拼接到与时间有关的对象中。便于记录。
Get-Date -Format 'yyyy/MM/dd hh:mm:ss' #结果:2021/08/04 09:46:54
Set-Content(sc)
功能:是一个串处理cmdlet。向一个文件中写一些内容,或者替换文件中的某些内容。
内容通过Value参数或者管道传递给Set-Content。
重要参数说明:-Encoding参数指明目标文件编码类型。默认是utf8NoBOM,该参数只有在文件系统中有效。-Force参数强行设置文件的内容,即使文件是只读的。
实例:
Get-Content -Path E:\temp\*.txt -Value 'Hello world' #Vaule可以是变量。
#替换E:\temp目录下所有.txt文件的内容为Hello world
Get-Content -Path E:\temp\*.txt
结果:
Hello world
Hello world
#若目标文件不存在,会自动创建
Set-Content -Path E:\temp\DateTime.txt -Value (Get-Date) #DateTime.txt不存在。将Get-Date的结果写入此文件中。
#替换文件中内容,将替换结果写会源文件
(Get-Content -Path .\Notice.txt) |
ForEach-Object {$_ -Replace 'Warning', 'Caution'} |
Set-Content -Path .\Notice.txt
#-Filter参数
Set-Content -Path C:\Temp\* -Filter *.txt -Value "Empty"
#-Exculde参数有效,只有当命令路径参数包含的是内容时。
Set-Content -Path E:\temp\*.txt -Exclude aa.txt -Value (Get-Date)
mkdir(md)
注意:mkdir是一个函数,它调用了New-Item cmdlet,此命令可以创建目录和文件。mkdir将-Type参数的值固定为了Directory。因此只能创建目录。
运行Get-Content Function:\mkdir可以看到mkdir函数的细节。
Get-Item(gi)
功能:获取指定位置的对象。它不会获取对象的内容,除非用通配符*去要求获得所有内容。即获取路径参数本身。
实例:
Get-Item E:\temp #结果是temp目录本身
Directory: E:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2021/7/2 16:06 temp
#注意于Get-Item对比
Get-ChildItem E:\temp #结果于Get-Item E:\temp\*一样。
Directory: E:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2021/7/2 16:12 7 aa.txt
-a---- 2021/7/2 16:24 19 bb.txt
-a---- 2021/7/2 16:20 19 DateTime.txt
Invoke-WebRequest(curl,iwr,wget)
功能:向web网页或web服务发送HTTP/HTTPS请求。它解析响应,返回一系列链接,图片和其他重要的HTML元素。
实例:
$Response = Invoke-WebRequest -Uri https://www.bing.com/search?q=how+many+feet+in+a+mile
$Response.InputFields | Where-Object {
$_.name -like "* Value*"
} | Select-Object Name, Value
name value
---- -----
From Value 1
To Value 5280
Get-WMIObject
说明:从powershell3.0开始,此cmdlet已被Get-CimInstance代替。
功能:获取WMI类的实例或者一些关于WMI类的信息。
参数说明:-List参数用于在一个指明的名字空间中获取关于WMI类的信息。-Query用于指明WMI请求语句。-Computer参数用于指明远程机器名,但并非远程执行,因此不必配远程操作的环境也可执行。
注意:-Class参数指明一个类的名字。常用的类名有Win32_computerSystem,Win32_bios,Win32_baseboard,Win32_processor,Win32_Share(文件共享),Win32_LogicalDisk(硬盘),Win32_PhysicalMemory,Win32_operatingSystem等。
实例:
Get-WmiObject -List #列出所有的WMI类
Get-WmiObject Win32_bios | Get-Member #获取类Win32_bios的所有属性
(Get-WmiObject -Class Win32_Service -Filter "name='WinRM'" -ComputerName Server01).StopService()
#停止远程机器Server01上的WinRM服务.此时于Stop-Service类似
Get-WmiObject -Class Win32_Bios | Format-List -Property * #获取本地机器的BIOS信息。-Property参数值指明显示所有属性。
Get-WMIObject Win32_LogicalDisk -Filter "DeviceID='C:").FreeSpace/1024MB
#返回c盘的剩余空间。单位GB
Get-WmiObject -Class Win32_Process #获取本地机器的所有进程
Get-WmiObject -Class Win32_Service -ComputerName 10.1.4.62 #远程机器
Get-WmiObject -Namespace "root/default" -List #在本地的root或default名字空间获取WMI类
(Get-WMIObject Win32_LogicalDisk -Filter "DeviceID='C:'").FreeSpace/1024MB #返回c盘剩余多少GB
Get-SqlAgent
功能:获取一个SQL agent对象,这个对象会出现在SQL Server的任务实例中。
实例:
#获取一个server 实例的SQL Agent。
Get-SqlAgent -ServerInstance "SERVERNAME\INSTANCENAME"
Get-SqlAgentJob
功能:为每一个工作返回一个SQL Agent Job对象实例。而这些工作出现在SQL Agent的任务实例中。
实例:
#从指定的server实例(MyServerInstance)中获取所有的工作实例
Get-SqlAgent -ServerInstance MyServerInstance | Get-SqlAgentJob
#从指定的server实例中,通过指定名字,选择一个工作实例
Get-SqlAgent -ServerInstance MyServerInstance | Get-SqlAgentJob -Name MyJob1
Out-Null
功能:把输出发送给NULL,即从管道删除它,从而阻止输出到屏幕上。
实例:
Get-ChildItem | Out-Null #屏幕上无输出
Remove-Item(rm,del,erase,rmdir等)
功能:删除一个或多个对象(包括文件,文件夹,变量,别名,函数等)。
实例:
Remove-Item C:\Test\*.* #删除文件名中有"."的文件(即有扩展名),但不会删除文件夹。
Remove-Item * -Include *.doc -Exclude *1* #删除当前文件夹下含.doc
的文件,但含1的文件不删除。
Remove-Item -Path C:\Test\hidden-RO-file.txt -Force #-Force用于删除隐藏文件和只读文件。若路径含空格,需要用引号引起来
!!!!!
Remove-Item使用-Recurse要注意,若同时使用了-Include参数,直接使用如Remove-Item -Path C:\Test\* -Recurse可能不会总是能正确的删除子目录和文件。因此建议下面的用法:
Get-ChildItem * -Include *.csv -Recurse | Remove-Item
Get-ChildItem | Where-Object Name -Like '*`[*' | ForEach-Object { Remove-Item -LiteralPath $_.Name } #删除当前目录下文件名中带有[的文件。-LiteralPath参数一个或多个位置的路径。
Test-Path
功能:判断路径下的所有元素是否存在。若有任何一个成员不存在,则返回$False.它也可以用来判断路径语法是否有效以及路径是一个目录(container)还是一个文件(leaf)。若路径是空白符或者空串,返回$False.若路径是$null,一组$null变量或者空数组,则返回一个非终端错误。
实例
Test-Path -Path "C:\Documents and Settings\DavidC" #检查C:;Documents and Settings目录以及DavidC目录是否存在,若都存在,结果为True;否则为False
Test-Path -Path $profile
False #路径不存在
Test-Path -Path $profile -IsValid
True #路径的语法正确
#测试目录除了.txt文件文件外,是否还有其他文件
#若E:\temp下只有aa.txt,则
#若路径有空格,则需用引号包裹
Test-Path -Path "E:\test\*" -Exclude *.txt #若目录中只有.txt文件,则结果为False
Test-Path -Path "E:\test" -Exclude *.txt #结果为True。!!!
Test-Path -Path $profile -PathType leaf #若路径指向一个文件(有无文件扩展名均有效),则返回True
Test-Path -Path $profile -PathType container #若路径指向一个目录,则返回True
Test-Path $pshome\pwsh.exe -NewerThan "July 13, 2009" #文件修改日期在July 13, 2009之后,则返回True
#以下三种情况,均出错
Test-Path $null
Test-Path $null, $null
Test-Path @()
#当-Path值为空串或者空格时,返回false。(以下结果均为false)
Test-Path ' '
Test-Path ''
Start-Transcript
功能:将powershell会话的所有或者部分记录写入一个文本文件里。写入的内容包括用户敲击的命令以及要出现在控制台的输出。
特别的,使用Append参数时,如果目标文件无Byte Order Mark (BOM),则Start-Transcript默认在目标文件中使用ASCII编码。
实例:
Start-Transcript #启动一个Transcript在默认的文件位置
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
#在transcript0.txt中启动一个Transcript,-NoClobber参数防止已经存在的文件被覆盖。即transcript0.txt若存在,则命令执行失败。
Stop-Transcript | out-null #停止一个由Start-Transcript启动的Transcript。同样,结束会话也可以结束一个Transcript
Set-Location(cd,sl,chdir)
功能:设置工作目录到指定的特定的路径。PowerShell 6.2支持+,-作为Path参数的值。
实例:
Set-Location -Path "HKLM:\" #设置工作目录为HKLM驱动的根位置
Set-Location -Path "Env:\" -PassThru #-PassThru参数命令powershell返回一个PathInfo对象,此对象代表Env:\位置。
Set-Location -Path - #有版本限制。类似cd -
Rename-Item
功能:重命名一个对象
示例:
Rename-Item -Path "c:\logfiles\daily_file.txt" -NewName "monday_file.txt" #重命名单个文件
#将某个目录下的所有bak文件的名字中的'_20220427_050955'串删除,其他不动。
#注意-replace的用法。将文件名的开头和结尾分别命名为begin,end保留。
Get-ChildItem "C:\Backup\*.BAK" | Rename-Item -NewName {$_.Name -replace '(?<begin>.*)(_20220427_050955)(?<end>.*)','${begin}${end}'}
Get-WebAppPoolState
功能:获取iis 应用池(application pool)的运行状态。
实例:
(Get-WebAppPoolState -Name "DefaultAppPool").Value#输出app application的状态。 值可能是Started等。