Powershell 使用Get Job测试连接,但完全不同

Powershell 使用Get Job测试连接,但完全不同,powershell,connection,Powershell,Connection,这是我在这里的第一篇文章,我尝试自己在PS上编写脚本,现在我的目标是编写脚本,检查计算机是否在网络上联机,例如:测试连接192.168.0.1、2、3等。在循环中逐个执行此操作需要一些时间。如果一些计算机脱机,我在该网站上找到了一些可使用的教程-AsJob param,但我真的不确定它是怎么工作的。我的意思是我想把每台检查过的电脑输出到excel,所以我需要if操作员。例如: 如果(作业1已完成成功(计算机ping)){ 做smth} 我需要从Job boolean(真/假)中获得输出,但要逐个

这是我在这里的第一篇文章,我尝试自己在PS上编写脚本,现在我的目标是编写脚本,检查计算机是否在网络上联机,例如:测试连接192.168.0.1、2、3等。在循环中逐个执行此操作需要一些时间。如果一些计算机脱机,我在该网站上找到了一些可使用的教程-AsJob param,但我真的不确定它是怎么工作的。我的意思是我想把每台检查过的电脑输出到excel,所以我需要if操作员。例如:

如果(作业1已完成成功(计算机ping)){ 做smth}

我需要从Job boolean(真/假)中获得输出,但要逐个获得。我在PS中迈出了第一步,我已经制作了一个程序,在for循环中一个一个地检查它,但正如我所说的,我的excel文件填充需要一些时间

我明白了,AsJob让工作更有效,我认为理解它很重要


感谢并为糟糕的文本格式感到抱歉,到时候我会继续写下去的

在您的示例中,在开始作业脚本块中,您正试图访问代码块范围中不可用的
$\uu
。如果用
$args[0]
替换
$\uucode>,应该可以使用,因为您正在将$ip值作为参数传递

你的榜样

$ipki = Get-Content 'C:\Users\pchor\Desktop\ipki.txt'
foreach ($ip in $ipki) {
    Start-Job -Name "$ip" -ScriptBlock {
        Test-Connection $_ -Count 1  # <---- replace $_ with $args[0]
    } -ArgumentList $_  # <----- change $_ to $ip 
}
输出

Computer       Alive
--------       -----
www.google.com  True
www.yahoo.com   True
要根据需要修改属性,有不同的方法。在这种情况下,最简单的方法可能是使用计算属性

$newResults = $results | 
    Select-Object Computer, 
    @{Label = 'State'; Expression = { if ($_.Alive) { 'Online' } else { 'Offline' } } }
对象现在看起来像这样(我添加了另一个假地址来说明脱机状态)

然后,您可以使用
export csv

$newResults | Export-Csv -Path c:\temp\output.csv

这回答了你的问题吗。请注意,
ForEach Object-Parallel
在后台自动创建作业。这不是我真正的问题,我正在尝试一次检查多台计算机,如果我一台接一台地检查,这将需要很长时间。我的问题是:如何输出接收作业,如:$ip=(某些ip)$ip |选择对象-第一个3 | ForEach对象{Start Job-Name$|-ScriptBlock{$temp=Test Connection$|-Count 1-如果($temp){Write Host“$|在线,}其他{Write Host”$|离线}我想:当我使用接收作业输出时是:ip1在线ip2离线ip3在线(…)我想用
ForEach Object-Parallel检查192.169.50.1-255的Ip,实际上是同时检查多台计算机。这就像创造就业机会,但处理起来要简单得多。默认情况下,它最多创建5个作业。您可以像
ForEach Object-Parallel-ThrottleLimit 10
那样增加该值。现在它最多可以运行10个作业。请注意,
ForEach Object-Parallel
在Powershell v7之前不可用。我回答了一个错误:ForEach Object:Parameter set无法使用指定的命名参数进行解析。我想它不再可用“param-Parallel”。有人有任何提示吗?我只想在作业是否成功完成时获得输出,而不是使用if Station简单地用IP和状态填充excel单元格是的,这就是我想要的,我如何访问每个地址的“真”值?例如:If(www.google.com-eq True){write host=“Online”}else{write host=“offline”}更新了答案,包括如何转换具有计算属性的对象以及如何将数据导出到csv filePerfect!非常感谢你,现在是时候分析你的代码来理解它了!(B)
Computer                 State
--------                 -----
www.google.com           Online
www.yahoo.com            Online
xxx.NotAValidAddress.xxx Offline
$newResults | Export-Csv -Path c:\temp\output.csv