Powershell有很多种不同的运行方式,每一种运行方法都有自个的用途,主要包括以下几种方法:
1.直接运行
2.Invoke-Expression
3.Invoke-Command
4.Invoke-Item
5.操作符&
6.cmd /c
7.Start-Process
8.[Diagnostics.Process]::start()
9.WMI win32_Process Create()
一.直接运行——使用环境路径或者本地路径
用途:简单、使用
实例:
#运行指令ping,无需前缀".\", 因为它在system32文件夹(这是环境路径) ping localhost |
#test.ps1存在当前路径,运行test.ps1,需带前缀".\" .\test.ps1 |
二.Invoke-Expression
用途:主要针对字符串的执行
实例:
$str = "Get-Host"; Invoke-Expression $str; |
三.Invoke-Command
用途:通过WSMAN方式 在多台电脑上执行代码
$scriptblock={gwmi win32_ComputerSystem}; Invoke-Command -scriptblock $scriptBlock -computerName "computer1","computer2" |
四.Invoke-Item
用途:强制用默认方式来操作项,可同时打开多个
实例:
Invoke-Item *.xls |
五.操作符&
用途:将字符串当做单行命令符来操作,主要用于带有空格的命令
实例:
& 'c:\Program Files\test.ps1' |
六. cmd /c
用途: 绕过Powershell,用cmd shell来运行指令。在powershell v2.0中效率比直接运行更高,但在
powershell v3.0几乎很少使用
实例:
cmd /c dir c:\ |
七.Start-Process
用途:启动进程执行程序,并返回.Net进程对象
实例:
$p = Start-Process ping -Argument 127.0.0.1 $p.HasExited |
八.[Diagnostics.Process] start()
用途:比Start-Process有更多的可控参数选择
实例:
$p = New-Object System.Diagnostics.Process $p.StartInfo.FileName = "ipconfig"; $p.StartInfo.Arguments = " /all"; $p.StartInfo.RedirectStandardOutout = $True; $p.StartInfo.UseShellExecute = $false; $p.Start(); $p.WaitForExit(); |
九.[WMIclass]Win32_Process Create()
用途:通过RPC 可运行于本地或远程,而非WSMAN(Invoke-Command),返回ManagementBaseObject对象
实例:
Invoke-WMIMethod -class Win32_Process -name Create -computerName "computer1" -ArgumentList notepad.exe |
([WMIclass]"Win32_Process").create('notepad.exe') |