【发布时间】:2016-09-01 21:26:27
【问题描述】:
我正在尝试通过交叉引用两个文本文档来创建报告。我有 C:\formeremployees.txt 和 C:\shareaudit.txt。你可以猜到,formeremployees.txt 只列出了前雇员的用户名。没有标题;只有用户名。 C:\shareaudit.txt 包含共享上每个文件夹的列表,ACL 信息位于文件夹路径旁边的同一行。
这是我创建报告的尝试,该报告仅列出了具有来自原employees.txt 的用户帐户的行:
$Users = Get-Content C:\formeremployees.txt
foreach ($User in $Users) {
$Output = Select-String -Path "C:\Shareaudit.txt" -Pattern "$User"
$Output.Line | Out-File C:\completereport.txt -Append
}
但不幸的是,我收到以下错误:
Select-String : 无法将参数绑定到参数“模式”,因为它是
空字符串。
在行:7 字符:71
+ $Output = Select-String -Path "C:\Shareaudit.txt" -Pattern "$User"
+ ~~~~~~~
+ CategoryInfo : InvalidData: (:) [Select-String], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.SelectStringCommand
Select-String:无法将参数绑定到参数“模式”,因为它是
空字符串。
在行:7 字符:71
+ $Output = Select-String -Path "C:\ShareAudit.txt" -Pattern "$User"
+ ~~~~~~~
+ CategoryInfo : InvalidData: (:) [Select-String], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.SelectStringCommand
然后我得到一个悲伤的、空的 completereport.txt 文件。我似乎无法让它工作或知道它是否可能。
编辑________________________
这是我尝试过的其他方法和结果:
$Users = Get-Content C:\formeremployees.txt|?{!([string]::IsNullOrWhitespace($_))}
foreach ($User in $Users) {
$Output = Select-String -Path "C:\Shareaudit.txt" -Pattern "$User"
$Output.Line | Out-File C:\completereport.txt -Append
}
这给了我一个空白的 C:\completereport.txt 文档。
$Users = Get-Content C:\formeremployees.txt|?{!([string]::IsNullOrWhitespace($_))}
$Pattern = ($Users|ForEach{[regex]::escape($_)}) -join '|'
Get-Content "C:\Shareaudit.txt" | Where{$_ -match $Pattern} | Set-Content C:\completereport.txt
据我所知,这没有做任何事情。完成时没有创建 completereport.txt 文档。
$Users=(Get-Content C:\formeremployees.txt) -ne ''
foreach ($User in $Users) {
$Output = Select-String -Path "C:\Shareaudit.txt" -Pattern "$User"
$Output.Line | Out-File C:\completereport.txt -Append
}
这给了我一个空白的文本文档。
$Output = Select-String -Path "C:\Shareaudit.txt" -Pattern "<single username from formeremployeee.txt>"
$Output.Line | Out-File C:\completereport.txt -Append
当我输入一个我知道仍然对共享中的某些文件夹具有权限的用户名并且也在以前的employee.txt 中时,该脚本按预期工作并为我提供了我需要的文件夹列表,因此没有任何问题脚本的底部部分,所以我猜是以前的employee.txt 或我使用 $Users 变量的方式有问题。
为了进一步测试,我尝试了这个:
$Users=(Get-Content C:\formeremployees.txt) -ne ''
foreach ($User in $Users) {
Select-String -Path "C:\Shareaudit.txt" -Pattern "$User"
}
这没有输出任何结果。文本formeremployee.txt 文件列出用户名如下:
username1
username2
username3
username4
它的格式是否错误?
【问题讨论】:
-
检查是否真的有空元素:
foreach ($User in $Users) { "-$User-" } -
这将用户列为:-username - -username1 - -username2 -
-
那些元素不会产生你所说的错误。请提供样本输入数据,以便我们重现问题。
标签: powershell