我想從所有檔案/檔案夾中獲取名稱為 System.ComponentModel.Annotations 的所有 *.ddl 檔案。我是PS新手。遞回部分是復制/粘貼,應該可以作業。我只是改變了過濾。
Get-ChildItem Where-Object { [Reflection.AssemblyName]::GetAssemblyName($_.FullName) -eq 'System.ComponentModelAnnotations'} -Recurse |
ForEach-Object {
try {
$_ | Add-Member NoteProperty FileVersion ($_.VersionInfo.FileVersion)
$_ | Add-Member NoteProperty AssemblyVersion (
[Reflection.AssemblyName]::GetAssemblyName($_.FullName).Version
)
} catch {}
$_
} |
Select-Object Name,FileVersion,AssemblyVersion
我得到的錯誤是:
Get-ChildItem : The filename, directory name, or volume label syntax is incorrect.
At line:1 char:1
Get-ChildItem Where-Object { [Reflection.AssemblyName]::GetAssemblyNa ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : ReadError: (C:\Repositories...backend\01.Code:String) [Get-ChildItem], IOException
FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand
Where-Object 比較有什么問題?
uj5u.com熱心網友回復:
Get-ChildItem并且Where-Object是兩個單獨的命令。要使用兩者組合管道,請使用管道符號|將輸出從一個路由到另一個:
Get-ChildItem -Filter *.dll -Recurse |Where-Object { [Reflection.AssemblyName]::GetAssemblyName($_.FullName).Name -eq 'System.ComponentModelAnnotations' } |ForEach-Object { ... }
值得注意的是,您可以ForEach-Object完全跳過命令并將輸出通過管道傳輸到Add-Member- 您只需添加-PassThru開關以確保它將修改后的物件反饋回管道:
Get-ChildItem -Filter *.dll -Recurse |
Where-Object { [Reflection.AssemblyName]::GetAssemblyName($_.FullName).Name -eq 'System.ComponentModelAnnotations' } |
Add-Member NoteProperty FileVersion -Value {$_.VersionInfo.FileVersion} -PassThru |
Add-Member NoteProperty AssemblyVersion -Value {[Reflection.AssemblyName]::GetAssemblyName($_.FullName).Version} -PassThru |
Select-Object Name,FileVersion,AssemblyVersion
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/412543.html
標籤:
下一篇:XML按子節點值洗掉節點
