我正在尝试查找C驱动器上具有特定文件夹的所有计算机。 我正在使用正在搜索的所有计算机的txt文件。 如果该文件夹位于c驱动器上,我想将其导出到CSV文档。如果该文件夹不存在,则无需执行任何操作。
我还添加了一个测试连接,以跳过当前离线的所有计算机。
当前,当我单步执行代码时,它似乎正确地击中了每一行,并创建了导出的csv文档,但是它是空白的,没有任何列或数据。
由于我是新人,所以我可能会以错误的角度来解决这个问题。
谢谢。
$A = @(Get-Content 'c:\users\\me\computerlist.txt')
Foreach ($i in $A) {
If (Test-Connection -ComputerName $i -Quiet -Count 1) {
Select-Object @{Name='ComputerName';Expression=
{$_}},@{Name='FolderExist';Expression={ Test-Path "\\$_\c$\Program
Files (x86)\Test"}} | Export-Csv \\me\C$\Users\me\Exported.csv
}
Else {Write-Host $i' not reachable'}
}
就像我说的那样,调试它-看似正确地逐步完成并创建了导出文件,但其中没有任何内容。
答案 0 :(得分:0)
您的ForEach
不是ForEach-Object
cmdlet,而是循环构造。因此,您不在Export-CSV
之前的管道中。不用在两个表达式中使用$_
,而要使用$i
,它是在ForEach(...)
循环的顶部建立的变量:
$A = @(Get-Content 'c:\users\\me\computerlist.txt')
Foreach ($i in (Get-Content -Path "C:\Users\Me\ComputerList.txt")) {
If (Test-Connection -ComputerName $i -Quiet -Count 1) {
Select-Object @{Name='ComputerName';Expression={$i}},@{Name='FolderExist';Expression={ (Test-Path "\\$i\c$\Program Files (x86)\Test")}} | Export-Csv \\me\C$\Users\me\Exported.csv
} #Note use of $i instead of $_ in above line
Else {Write-Host $i' not reachable'}
}
答案 1 :(得分:0)
您的Select-Object
调用没有收到任何来自管道的输入,因此它不会向使用Export-Csv
指定的目标文件发送任何内容。
(即使没有对象最终流过管道,目标文件仍会在管道初始化期间创建,并且为空。)
按如下方式使用单个管道;自动$_
变量代表当前的输入对象,它始终引用当前的计算机名称:
Get-Content 'c:\users\me\computerlist.txt' |
Where-Object {
$reachable = Test-Connection -ComputerName $_ -Quiet -Count 1
if (-not $reachable) { Write-Host "$_ not reachable" }
$reachable
} | Select-Object @{Name='ComputerName';Expression={$_}},
@{Name='FolderExist';Expression={ (Test-Path "\\$_\c$\Program Files (x86)\Test")}} |
Export-Csv \\me\C$\Users\me\Exported.csv