我正在尝试创建一个循环的机器名索引。该文件看起来正确,但根本无法循环遍历计算机,就好像存在隐藏字符或有关该文件的异常情况。我错过了什么?谢谢 - 是的,我是新手。
的PowerShell:
$uncServer="\\*******\DHCP"
$username="*****"
$password="*******"
net use $uncServer $password /USER:$username
$input_path=$uncServer+"\"+'winsexport.txt'
$output_file='D:\Projects\StoreControls\machinfo\allworkstations.txt'
$regex='\b[S]\d{6}\b'
Select-String -Path $input_path -Pattern "ACTIVE" |Select-Object Line | `
Select-String -Pattern $regex -Allmatches|%{$_.Matches}|%{$_.Value}| get-unique > $output_file
net use $uncServer /delete
例如。输出
s123420
s123421
.
.
循环逻辑:
FOR /F %%i IN (d:***********\allworkstations.txt) DO ( #this does nothing
start /B d:\***********\GetMachInfo.bat %%i
PING 1.1.1.1 -n 1 -w 1000 >NUL
)
PING 1.1.1.1 -n 1 -w 1000 >NUL
exit
答案 0 :(得分:0)
很难推测知道 winsexport.txt 文件中的内容。最可能的罪魁祸首是CR或LF字符,所以请尝试删除它们。变化
... -Allmatches|%{$_.Matches}|%{$_.Value}| get-unique ...
到
... -Allmatches|%{$_.Matches}|%{$_.Value -replace "`r|`n|\s|`t",""}| get-unique ...
为什么要切换回命令提示符循环?你可以继续使用powershell
foreach($machine in (gc d:***********\allworkstations.txt)){
d:\***********\GetMachInfo.bat $machine
sleep 1
}
sleep 1