有时当我在Windows 10计算机上编写脚本(PowerShell 5.0)时,我会使用早期版本的PowerShell上没有的命令,参数或别名,例如-persist
new-psdrive
参数在所有Win7机器都使用的PowerShell 2.0上不可用。
正确设置我的#requires -version x
语句,我需要知道我的脚本中是否存在早期PowerShell版本无法使用的命令。当您编写1000行代码时,在脚本中找到不可用的命令可能会有点困难。
有没有办法以编程方式检查这个,除了在不同的PowerShell环境中运行脚本并看看发生了什么?
答案 0 :(得分:1)
您是否考虑过在Windows 10计算机上进行开发,但是将powershell配置文件设置为始终运行powershell -version 2?
你将启动powershell,它将启动版本2以进行开发,如果脚本中有错误,你知道它们何时被创建,以及在版本5中运行的命令(或者你的Win10机器有什么版本)会失败的。
应该注意的是,像这样启动powershell:
powershell -version 2
将保持逻辑相同并且像版本2 powershell一样,但是帮助文件和来自命令Get-Help的输出仍将显示真正的powershell版本的版本5(或其他)语法。
设置Powershell配置文件:
http://www.howtogeek.com/50236/customizing-your-powershell-profile/
您可以查看正在运行的版本 $ PSVersionTable
答案 1 :(得分:0)
这并不能真正回答你的问题
但我使用"脚本分析器"随https://gallery.technet.microsoft.com/scriptcenter/Getting-started-with-57e15ada
附带我以前认为如果在不同的版本级别检查它是否会增强会很好。要么输出脚本的最低版本。或者你指定一个目标版本,它会告诉你出了什么问题。
答案 2 :(得分:0)
我们决定为所有系统制定Powershell v.4基线。所以我写了一个powershell脚本,以确保v.4安装在所有系统上。这设置为在机器配置下通过GPO关闭脚本运行。
IF ($PSVersionTable.PSVersion.Major -like "4*"){$StringToWrite | Out-File -FilePath $Logpath\PwrShl\Powershell_UpToDate_$hostname.log -Append; IF (Test-Path -Path $Logpath\PwrShl\Powershell_OutofDate_$hostname.log){Remove-Item $Logpath\PwrShl\Powershell_OutofDate_$hostname.log -Force}; exit}
IF (($PSVersionTable.PSVersion.Major -like "2*") -or ($PSVersionTable.PSVersion.Major -like "3*")){$StringToWrite | Out-File -FilePath $Logpath\PwrShl\Powershell_OutofDate_$hostname.log -Append}
if ($env:PROCESSOR_ARCHITECTURE -eq "x86"){
if (!(Test-Path C:\SchTsk\Temp\Windows6.1-KB2819745-x86-MultiPkg.msu)){Copy-Item "\\ad.dcpds.cpms.osd.mil\SYSVOL\ad.dcpds.cpms.osd.mil\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Scripts\Startup\Windows6.1-KB2819745-x86-MultiPkg.msu" -Destination C:\SchTsk\Temp\Windows6.1-KB2819745-x86-MultiPkg.msu -Force}
}
if ($env:PROCESSOR_ARCHITECTURE -eq "AMD64"){
if (!(Test-Path C:\SchTsk\Temp\Windows6.1-KB2819745-x64-MultiPkg.msu)){Copy-Item "\\ad.dcpds.cpms.osd.mil\SYSVOL\ad.dcpds.cpms.osd.mil\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Scripts\Startup\Windows6.1-KB2819745-x64-MultiPkg.msu" -Destination C:\SchTsk\Temp\Windows6.1-KB2819745-x64-MultiPkg.msu -Force}
}
IF ($env:PROCESSOR_ARCHITECTURE -eq "x86"){
Set-Location C:\SchTsk\Temp
if (!(Test-Path C:\SchTsk\Temp\Windows6.1-KB2819745-x86-MultiPkg.msu)){exit}
expand -F:* .\Windows6.1-KB2819745-x86-MultiPkg.msu C:\SchTsk\Temp
Start-Process dism.exe -ArgumentList '/online /add-package /PackagePath:C:\SchTsk\Temp\Windows6.1-KB2872035-x86.cab /NoRestart' -Wait
Start-Process dism.exe -ArgumentList '/online /add-package /PackagePath:C:\SchTsk\Temp\Windows6.1-KB2872047-x86.cab /NoRestart' -Wait
Start-Process dism.exe -ArgumentList '/online /add-package /PackagePath:C:\SchTsk\Temp\Windows6.1-KB2819745-x86.cab /NoRestart' -Wait
}
IF ($env:PROCESSOR_ARCHITECTURE -eq "amd64"){
Set-Location C:\SchTsk\Temp
if (!(Test-Path C:\SchTsk\Temp\Windows6.1-KB2819745-x64-MultiPkg.msu)){exit}
expand -F:* .\Windows6.1-KB2819745-x64-MultiPkg.msu C:\SchTsk\Temp
Start-Process dism.exe -ArgumentList '/online /add-package /PackagePath:C:\SchTsk\Temp\Windows6.1-KB2809215-x64.cab /NoRestart' -Wait
Start-Process dism.exe -ArgumentList '/online /add-package /PackagePath:C:\SchTsk\Temp\Windows6.1-KB2872035-x64.cab /NoRestart' -Wait
Start-Process dism.exe -ArgumentList '/online /add-package /PackagePath:C:\SchTsk\Temp\Windows6.1-KB2872047-x64.cab /NoRestart' -Wait
Start-Process dism.exe -ArgumentList '/online /add-package /PackagePath:C:\SchTsk\Temp\Windows6.1-KB2819745-x64.cab /NoRestart' -Wait
}
网络速度是否是一种crapy,我遇到了尝试继续运行并且文件不存在的问题。所以我只是让它退出,如果文件不在那里提取和安装。由于需要重启,因此关机脚本最多。这对我来说非常成功,有一些麻烦的孩子。