7

如何知道远程工作站上是否安装了powershell ;我们需要清点所有启用了 powershell 的工作站,以便我们可以计划更改以进行部署;有没有办法远程知道是否安装了powershell以及什么版本?

4

2 回答 2

4

检查文件是否存在?

$path= "\\remote\C$\windows\System32\WindowsPowerShell\v1.0\powershell.exe"
if(test-path $path){(ls $path).VersionInfo}
于 2013-01-25T17:28:47.880 回答
2

您可以使用手动运行的批处理脚本或尝试使用 GPO(作为启动脚本)。my-computer-name.txt如果找不到powershell ,它将保存一个带有“false”的文件,如果安装了PS,它将保存一个PS版本(1.0或2.0)。然后,您只需阅读文件。

pscheck.bat

@echo off
FOR /F "tokens=3" %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\PowerShell\1" /v Install ^| FIND "Install"') DO SET PowerShellInstalled=%%A

IF NOT "%PowerShellInstalled%"=="0x1" (
echo false > \\remote\location\%COMPUTERNAME%.txt

GOTO end
)

FOR /F "tokens=3" %%A IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine" /v PowerShellVersion ^| FIND "PowerShellVersion"') DO SET PowerShellVersion=%%A

echo %PowerShellVersion% > \\remote\location\%COMPUTERNAME%.txt

:end

注册表中 3.0 的 PSversion 值在另一个键(...\PowerShell\3\PowerShellEngine)中,但我猜测 PS3.0 没有必要知道,因为它是如此新,并且所有 PS 脚本都适用于 PS 2.0。

更新: Powershell 版本

function Check-PS {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline=$true)]
        [String[]]$ComputerName = $env:COMPUTERNAME
    )

    Process
    {
        foreach ($computer in $ComputerName) 
        {

            $path = "\\$computer\C$\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
            $exists = $false

            #Check if exists
            if(Test-Path $path){
                $exists = $true
                #Detect version
                switch -Wildcard ((Get-ChildItem $path).VersionInfo.ProductVersion)
                {
                    "6.0*" { $ver = 1 }
                    "6.1*" { $ver = 2 }
                    "6.2*" { $ver = 3 }
                    default { $ver = 0 }
                }

            } else {
                Write-Error "Failed to connect to $computer"
                $ver = -1
            }

            #Return object
            New-Object pscustomobject -Property @{
                Computer = $computer
                HasPowerShell = $exists
                Version = $ver
            }
        }
    }
}

它支持多个计算机名和通过管道输入。

Check-PS -ComputerName "Computer1", "Computer2"

或者

"Computer1", "Computer2" | Check-PS

使用本地计算机进行测试(默认计算机名):

PS > Check-PS

HasPowerShell Computer Version
------------- -------- -------
         True FRODE-PC       3
于 2013-01-25T18:14:46.750 回答