gpt4 book ai didi

powershell - 如何在复制项目错误时捕获计算机名称?

转载 作者:行者123 更新时间:2023-12-03 07:50:23 24 4
gpt4 key购买 nike

我正在尝试在多个远程Windows计算机上写入文件并删除文件。如果机器不可用,即。不在线,我想在错误日志中捕获该错误,以便将有问题的计算机名称列表发送给服务台。这可能很丑陋,但是我接近要起作用的东西。任何澄清将不胜感激。

$from="D:\whatever\machinfo"
$to="\\$machine\c\\scripts\"
output_file="D:\whatever\reports\$machine_writeerror.txt"

foreach($machine in(gc d:\whatever\machinfo\testworkstations.txt))
{
$machine
IF (!$to)
{
Copy-Item D:\whatever\machinfo\010RunGetmachinfo.bat \\$machine \c\scripts -verbose
# $errormsg="destination not found"
$machine > output_file
}
ELSE
{
# DO NOTHING
Remove-Item \\$machine\c\scripts\000dontrun.bat
}
}

好的,我已经重写了这个,但是我做的不正确。我想要一个唯一的错误文件,其中每个机器连接失败都包含一个文件,或者一个包含所有无法连接的所有计算机的计算机名的文件。我认为以下内容很接近(但不正确)。
$logfile="D:\Projects\StoreControls\machinfo\reports\"+$machine+"_writeerror.txt"

foreach($machine in(gc d:\projects\StoreControls\machinfo\testworkstations.txt))
{
$machine
If ( (Test-Connection -Computername $machine -Quiet -Count 1) -eq "False"){
$machine > $logfile}
Else{
Remove-Item \\$machine\c\scripts\tasks\000dontStart.bat
Copy-Item D:\Projects\StoreControls\machinfo\010RunPCsNServersGetmachinfo.bat \\$machine\c\scripts\tasks\
}
}

阅读更多有关Test-Connection的信息后,将“False”更改为$ False。作品!谢谢!

最佳答案

您可以通过测试automatic variable $?来测试命令的正确执行

所以你可以使用类似

Copy-Item D:\whatever\machinfo\010RunGetmachinfo.bat \\$machine\c\scripts 
if($? -eq $false){
# copy has failed
"Copy error on $machine" |out-file d:\whatever\reports\$machine_writeerror.txt

}

顺便说一句,一种更有效的方法可以是对主机执行ping操作,然后查看它是否还存在:
if ( (Test-Connection -ComputerName $machine -Quiet  -Count 1) -eq  $false){
#host not available

}

关于powershell - 如何在复制项目错误时捕获计算机名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23499542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com