Это немного сложно, поскольку openfiles
не является командлетом PowerShell.Он просто отображает свои данные в таблице, но это не объекты, которые он возвращает.PowerShell просто принимает их как строки.
$item = New-Object PSObject
switch -regex (openfiles /query /s SERVERNAME /fo list) {
'([^:]+):\s+(.*)$' {
$item | Add-Member NoteProperty $Matches[1] $Matches[2]
}
'^$' {
if ($item) { $item }
$item = New-Object PSObject
}
}
При этом используется формат списка, он анализируется и создается объекты, которые затем можно использовать.Оберните его в функцию (или подвыражение с $(...)
), и вы можете использовать Format-Table
:
$(
$item = New-Object PSObject
switch -regex (openfiles /query /s SERVERNAME /fo list) {
'([^:]+):\s+(.*)$' {
$item | Add-Member NoteProperty $Matches[1] $Matches[2]
}
'^$' {
if ($item) { $item }
$item = New-Object PSObject
}
}
) | ft 'Accessed By','Open File (Path\executable)' -auto
Или вы просто немного измените команды.Я использовал внутреннюю возможность итерации switch
, но вы можете сделать то же самое с явным конвейером:
openfiles /query /s SERVERNAME /fo list |
ForEach-Object {
$item = New-Object PSObject
} {
switch -regex ($_) {
'([^:]+):\s+(.*)$' {
$item | Add-Member NoteProperty $Matches[1] $Matches[2]
}
'^$' {
if ($item) { $item }
$item = New-Object PSObject
}
}
}
Так как это конвейер, вы можете добавлять другие команды в конце по желанию.*