早晨堆栈溢出
遇到了一个试图合并这两个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
}
}
答案 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' } | ...