我可以查看我的PS脚本需要哪个版本吗?

时间:2016-05-11 07:24:37

标签: powershell

有时当我在Windows 10计算机上编写脚本(PowerShell 5.0)时,我会使用早期版本的PowerShell上没有的命令,参数或别名,例如-persist new-psdrive参数在所有Win7机器都使用的PowerShell 2.0上不可用。

正确设置我的#requires -version x语句,我需要知道我的脚本中是否存在早期PowerShell版本无法使用的命令。当您编写1000行代码时,在脚本中找到不可用的命令可能会有点困难。

有没有办法以编程方式检查这个,除了在不同的PowerShell环境中运行脚本并看看发生了什么?

3 个答案:

答案 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,我遇到了尝试继续运行并且文件不存在的问题。所以我只是让它退出,如果文件不在那里提取和安装。由于需要重启,因此关机脚本最多。这对我来说非常成功,有一些麻烦的孩子。