Powershell /结合两个脚本

时间:2020-10-20 13:31:16

标签: powershell

早晨堆栈溢出

遇到了一个试图合并这两个PowerShell脚本的问题。当计算机回弹时,将其放在excel工作表中并运行此命令。当它什么都不做时,只是将它放在excel表中就失败了。这是我到目前为止所拥有的。创建了excel工作表,但命令未运行?

$Results = Get-Content -path c:\scripts\noclient.csv | ForEach-Object {
    if(Test-Connection -ComputerName $_ -Quiet -Count 1) {
        New-Object -TypeName PSCustomObject -Property @{
        'Computer Name' = $_
        'Ping Status' = 'Ok'
        }
    } else {
        New-Object -TypeName PSCustomObject -Property @{
        'Computer Name' = $_
        'Ping Status' = 'Failed'
        }
    }
}


$Results | Export-Csv -Path c:\scripts\PingStatus.csv -NoTypeInformation

$Results | Where-Object { $_.'Ping Status' = 'Ok' } | ForEach-Object {
    $vmhost = $_.'Computer Name'
    $dest = "\\"+$vmhost+"\C$\Windows\temp"
    copy-item "\\path\to\ccmsetup.exe" -Destination $dest -Force
    Invoke-Command -ComputerName $vmhost -ScriptBlock{
    $Exp = "cmd.exe /c C:\windows\temp\CCMSetup.exe /mp:servername /nocrlcheck /usepkicert smsmp=servername smssitecode=123"
    Invoke-Expression $Exp
    }
}

2 个答案:

答案 0 :(得分:0)

首先,CSV文件不是是Excel文件。 CSV是一个文本文件,其中包含可以在Excel中导入的结构化(定界)数据。

接下来,我将使用Start-Process而不是Invoke-Expression,为什么启动cmd.exe来运行CCMSetup.exe?

我自己无法测试,但是请尝试

Invoke-Command -ComputerName $vmhost -ScriptBlock {
    $params = '/mp:servername', '/nocrlcheck', '/usepkicert', 'smsmp=servername', 'smssitecode=123'
    Start-Process -Wait -FilePath "C:\windows\temp\CCMSetup.exe" -ArgumentList $params
}

此外,=是分配,而不是comparison operator
$_.'Ping Status' = 'Ok'-> $_.'Ping Status' -eq 'Ok'

答案 1 :(得分:0)

在检查-eq时,在脚本的第二部分中

使用=代替Ping Status,即:

$Results | Where-Object { $_.'Ping Status' -eq 'Ok' } | ...