我对 powershell 还很陌生,我需要帮助我的同事查找文件夹中包含单词 的所有文件/Documents/
。
输出必须在包含路径和该文件中的行的文本文件中。
首先,我设法使用以下代码提取路径。但我无法包含以下几行:
$path = 'C:\Users\XXX'
$Text =”/Documents/"
$PathArray = @()
Get-ChildItem $path -Filter *.rdl -Recurse |
ForEach-Object {
If (Get-Content $_.FullName | Select-String -Pattern $Text ){
$PathArray += $_.FullName
$PathArray += $_.FullName
#write-Host "jhk"
}
$PathArray | % {$_} | Out-File "C:\Users\XX\tes2.txt"-Append
}
Write-Host "Contents of ArrayPath:"
$PathArray | ForEach-Object {$_}
该代码有效,但正如所说,我也不确定如何添加这些行。
答案1
至关重要的是,如果你是新手,你首先要花时间进行熟悉,以避免遇到许多不必要的挫折和困惑。
搜索PowerShell 上的 Microsoft 虚拟学院和YouTube免费视频培训。
以下是一些其他资源和建议:
- 这里有免费电子书地点
- 阅读您尝试使用的任何 cmdlet 的完整帮助文件
- 通过例子进行练习
- 再次阅读帮助文件
- 选几本好书,比如,“一个月午餐中的 PowerShell”。
- 微软网站和其他网站上有很多免费的 PowerShell 电子书。
也可以看看:PowerShell 生存指南
至于你问题的具体例子。这种方法怎么样?
$searchWords = @('Hello','Client')
Foreach ($sw in $searchWords)
{
Get-Childitem -Path "d:\temp" -Recurse -include "*.txt","*.csv" |
Select-String -Pattern "$sw" |
Select Path,LineNumber,@{n='SearchWord';e={$sw}}
}
# Partial Results
Path LineNumber SearchWord
---- ---------- ----------
D:\temp\Duplicates\BeforeRename1\PsGet.txt 157 Hello
D:\temp\Duplicates\BeforeRename1\PsGet.txt 161 Hello
D:\temp\Duplicates\BeforeRename1\StringText.txt 1 Hello
D:\temp\Duplicates\PoSH\PsGet.txt 157 Hello
D:\temp\Duplicates\PoSH\PsGet.txt 161 Hello
D:\temp\Duplicates\PoSH\StringText.txt 1 Hello
...
D:\temp\Duplicates\BeforeRename1\PoSH-Get-Mo... 108 Client
D:\temp\Duplicates\BeforeRename1\Powershell ... 12 Client
D:\temp\Duplicates\BeforeRename1\Powershell ... 15 Client
...
D:\temp\Duplicates\BeforeRename1\WindowsFeat... 92 Client
D:\temp\Duplicates\BeforeRename1\WindowsFeat... 94 Client
D:\temp\Duplicates\BeforeRename1\WindowsFeat... 149 Client
D:\temp\Duplicates\BeforeRename1\WindowsFeat... 157 Client
D:\temp\Duplicates\BeforeRename1\WindowsFeat... 191 Client
D:\temp\Duplicates\BeforeRename1\WindowsFeat... 239 Client
D:\temp\Duplicates\BeforeRename1\WindowsFeat... 241 Client