在PowerShell Foreach循环中正确使用Get Childitem
我想获取一个带有用户名的文本文件,然后搜索特定位置(路径),并返回找到的任何匹配项,将它们输出到日志文件:在PowerShell Foreach循环中正确使用Get Childitem,powershell,Powershell,我想获取一个带有用户名的文本文件,然后搜索特定位置(路径),并返回找到的任何匹配项,将它们输出到日志文件: #Searches target folder for all folders matching input $start = (get-date -uformat "%Y-%m-%d_%H%M") $defaultLogFileName = "folder_matcher" + $start + ".log" #Log file header $header = @() $head
#Searches target folder for all folders matching input
$start = (get-date -uformat "%Y-%m-%d_%H%M")
$defaultLogFileName = "folder_matcher" + $start + ".log"
#Log file header
$header = @()
$header += "=============================="
$header += "Search results"
$header += ""
$header += "Execution Start: " + (get-date -uformat "%Y-%m-%d %H%M") + ""
$header += ""
#Get the logfile location
do
{
$logdir = Read-Host "Enter log directory (or press Enter for default c:\)"
if ($logdir -eq "")
{$logfile = ("c:\" + $defaultLogFileName); break;}
if(Test-Path $logdir)
{$logfile += ($logdir + "\" + $defaultLogFileName); break;}
Write-Host -ForegroundColor Red "Directory does not exist"
} while (!(Test-Path $logfile))
$SourceFile = Read-Host "Enter file path"
$SearchValue = Read-host "Enter target directory to sweep"
$header | Out-File -FilePath $logfile
foreach($user in $sourcefile){
Get-ChildItem $SearchValue -filter $user | Out-file -Append -FilePath $logfile
}
当我尝试在此循环中使用时,结果如下:
Get-ChildItem : Second path fragment must not be a drive or UNC name.
Parameter name: path2
At \\erebus\erebus_users$\rraymond1\ps\searchandmatch.ps1:32 char:14
+ Get-ChildItem <<<< $SearchValue -filter $user | Out-file -Append -FilePath $logfile
+ CategoryInfo : InvalidArgument: (\\harvard\tsprofiles$:String)
[Get-ChildItem], ArgumentException + FullyQualifiedErrorId DirArgumentError,Microsoft.PowerShell.Commands.GetChildItemCommand
Get ChildItem:第二个路径片段不能是驱动器或UNC名称。
参数名称:path2
At\\erebus\erebus\U用户$\rraymond1\ps\searchandmatch.ps1:32字符:14
+Get ChildItem我自己刚刚解决了这个问题——问题是我对ForEach的理解以及它能做什么和不能做什么。我认为它能够自行执行获取内容的功能。我所要做的就是添加一行新代码:$Users=Get Content$SourceFile并将循环更改为:foreach($Users中的user)您应该能够回答自己的问题。一旦您拥有15个声誉,您就可以回答自己的问题并接受它。