如何在 wmic 中过滤共享

如何在 wmic 中过滤共享

我通过命令建立了它:

wmic share where type=0 get name,path

我可以列出我感兴趣的共享。我无法更改它们的共享设置或安全权限,但我想备份它们。

关键是 - 有人让一个共享里面有另一个共享变得有点奇怪(可以通过文件权限来完成但实际上没有)。

文件系统如下所示:

share1
- share1.1
- share1.2
share2
-share2.1
--share2.1.1
--share2.1.2
-share2.2
etc...

在这种情况下,wmic 将单独列出所有共享,我将多次备份它们。

知道如何让它只检查文件树的最高阶段吗?

答案1

您可以使用 PowerShell!将以下脚本保存为.ps1文件,然后按照启用脚本部分中的说明进行操作PowerShell 标签 wiki

$sharepaths = gwmi -Class 'Win32_Share' | ? {-not $_.Name.EndsWith('$')} | % {$_.Path.ToUpperInvariant()} | sort
$lastroot = $null
ForEach ($path In $sharepaths) {
    If ($lastroot -ne $null -and $path.StartsWith($lastroot)) {Continue}
    $lastroot = $path
    # Run backup command here
}

它的工作原理是获取所有Win32_ShareWMI 实例(例如批处理文件),过滤掉不以 a 结尾的实例$(这表示隐藏共享),只提取全大写路径,然后对路径列表进行排序。当我们遍历列表时,这种排序很重要。如果当前路径以最后一个“根”共享的路径开头,我们会跳过它,因为它已经备份了。

您需要将#注释行替换为运行备份的程序。此时,$path变量包含共享的本地路径。您也可以在其中运行非 PowerShell 实用程序,例如xcopy或。robocopy

或者,您可以用 替换该行$path,它将当前共享的路径返回给脚本的调用者。在该策略中,您将从批处理中调用 PowerShell 脚本,然后使用普通批处理循环对其返回的每一行(即每个路径)执行某些操作。例如,如果您将上述脚本命名为shareroots.ps1,则可以像这样运行它:

powershell .\shareroots.ps1

相关内容