gpt4 book ai didi

powershell - openfiles.exe的格式表输出

转载 作者:行者123 更新时间:2023-12-03 00:26:56 26 4
gpt4 key购买 nike

我正在尝试“即时”格式化openfiles.exe的输出,而不是将输出保存到CSV并导入。
如果我只运行openfiles /query /s SERVERNAME /fo table,我会得到

ID       Accessed By          Type       Open File (Path\executable)
======== ==================== ========== =====================================
1558 AUSERNAME Windows D:\..\Imaging\Itool.ldb

现在,我想通过“访问者”或“打开文件”即时对结果进行排序,所以我尝试了 openfiles /query /s SERVERNAME /fo table | Format-Table "Accessed By","Open File (Path\executable)" -auto只是吐出与第一个命令相同的东西。理想情况下,我只希望使用“访问者”和“打开文件(路径\可执行文件)”,并且只能按任意一个对它们进行排序。我试图避免做CSV事情。

最佳答案

这有点棘手,因为openfiles不是PowerShell cmdlet。它只是在表中显示其数据,但不是返回的对象。 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
}
}
}

由于这是一条管道,因此您可以随意在末尾添加更多命令。

关于powershell - openfiles.exe的格式表输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9728692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com