C# 在powershell单行脚本中使用测试连接返回目录内容
我最初编写了一个脚本,通过文本文件输入计算机名称,然后在一组路径中检查每个名称的子文件夹名称。该脚本工作得很好,但我想添加一个检查,以仅检查联机的计算机。我尝试过的每个C# 在powershell单行脚本中使用测试连接返回目录内容,c#,powershell,C#,Powershell,我最初编写了一个脚本,通过文本文件输入计算机名称,然后在一组路径中检查每个名称的子文件夹名称。该脚本工作得很好,但我想添加一个检查,以仅检查联机的计算机。我尝试过的每个测试连接方法最终都会将错误的值(或多余的值)传递到路径名中的$\uu变量中 我之所以尝试将其保留为一行脚本,是为了避免必须更改PowerShell执行策略(这将在不同的机器上运行,而不是每次都在同一台机器上运行) 下面是我目前编写的代码。我曾想过简单地把它转换成C#,我想知道是否有人能通过这样做想到任何负面的东西 Get-Cont
测试连接方法
最终都会将错误的值(或多余的值)传递到路径名中的$\uu
变量中
我之所以尝试将其保留为一行脚本,是为了避免必须更改PowerShell执行策略(这将在不同的机器上运行,而不是每次都在同一台机器上运行)
下面是我目前编写的代码。我曾想过简单地把它转换成C#,我想知道是否有人能通过这样做想到任何负面的东西
Get-Content c:\temp\serverlist.txt |
Select-Object @{Name='ComputerName';Expression={$_}},
@{Name='PROD XP Version';Expression={
Get-ChildItem -Path "\\$_\c$\Program Files (x86)\MyProgram",
"\\$_\c$\Program Files\MyProgam",
"\\$_\c$\Program Files (x86)\MyProgramTestFolder",
"\\$_\c$\Program Files\MyProgramTestFolder"
}} > c:\temp\testVersions.txt
编辑:我最近一次尝试的代码是:
Test-Connection -Count 1 -ComputerName (Get-Content C:\temp\serverlist.txt) |
Select-Object @{Name='ComputerName';Expression={$_}},
@{Name='PROD XP Version';Expression={
Get-ChildItem -Path "\\$_\c$\Program Files (x86)\MyProgram",
"\\$_\c$\Program Files\MyProgam",
"\\$_\c$\Program Files (x86)\MyProgramTestFolder",
"\\$_\c$\Program Files\MyProgramTestFolder"
}} > c:\temp\testVersions.txt
这适用于正确列出名称,但在检查路径时,会将一长串数据传递到$\uu
。我试图将路径中的$\u
更改为$\uAddress
,但没有效果
如果不使用
.address
我将获得\\BEN-ACH-LAP\root\cimv2:Win32\u PingStatus.address=“BEN-ACH-LAP”,BufferSize=…
作为我的第一个计算机名,这就是路径无法正常工作的原因,因为很明显,这不是一个有效的PC名称。您想筛选网络上可用的主机列表。为此,您需要在Where Object
过滤器中运行测试连接
:
Get-Content c:\temp\serverlist.txt |
Where-Object { Test-Connection -Computer $_ -Count 1 -Quiet } |
Select-Object ...
这将仅将那些主机名/地址传递给响应ICMP请求的
选择对象。对此表示抱歉-澄清了一些并添加了第二个代码块。使用-Quiet
开关进行测试连接。然后,您可以使用if语句返回的True或False。我已经确认它应该与原始代码一起工作,OP。只需删除您的测试连接语句并替换为Ansgar的。绝对完美,我正在寻找的-谢谢!!!!!!!你们两个-我就是这么做的,福克斯