WMIC 查询以在 Windows 10 中派生 LAN 上的绝对共享路径
WMIC query to derive absolute share paths on LAN in Windows 10
我正在尝试使用 WMIC 或类似的网络工具 运行 从批处理中从 LAN PC 驱动器上文件夹的网络路径导出绝对或完整本地路径。经测试,此站点上的一些专用于类似任务的线程未在 Win 10 中提供有效的解决方案。
例如,当 运行在 Win 10 Cmd 中选择一个答案中的建议查询时,我得到:
C:\WINDOWS\system32>wmic share where "name='\Laptop\Data'" get path
Node - OFFICE
ERROR:
Description = Invalid query
C:\WINDOWS\system32>wmic share where "name='Data'" get path
No Instance(s) Available.
我需要这个结果:K:\Data,其中 K:\ 是 LAN 上远程 PC 的硬盘驱动器,Data 是该驱动器上的共享文件夹。
有人可以为该任务建议一个有效的查询和批处理吗? WMIC 文档过于广泛,如果没有丰富的工具使用经验,无法通过反复试验得出有效的查询。
wmic share where name='C$' get path
在这里工作(因为只有一个测试不需要双引号)。也是
wmic share where "name='C$'" get path
您发布的内容说您没有名为 data
的共享。
wmic share get /format:list
显示你所拥有的。
C:\Users\User>wmic share get
AccessMask AllowMaximum Caption Description InstallDate MaximumAllowed Name Path Status Type
TRUE Remote Admin Remote Admin ADMIN$ C:\Windows OK 2147483648
TRUE Default share Default share C$ C:\ OK 2147483648
TRUE Default share Default share D$ D:\ OK 2147483648
TRUE fred fred C:\Intel OK 0
TRUE Default share Default share G$ G:\ OK 2147483648
TRUE Remote IPC Remote IPC IPC$ OK 2147483651
TRUE TestC TestC C:\ OK 0
一如既往wmic /?
, wmic share /?
, wmic share call /?
, wmic share get /?
, wmic /format /?
.
对于远程计算机,您必须连接到该计算机(请参阅 wmic /node /?
)。
wmic /node:127.0.0.1 share get
下面列出了 local 机器上映射到(当前连接的)远程共享的驱动器号。
C:\etc>for /f "tokens=1-3" %x in ('net use') do @if /i "%x" equ "ok" echo %z = %y
\laptop\x$ = P:
\laptop\data = Q:
在 OP 编辑之后(突出显示 我的):
[+ 编辑 以获得正确的 net share
用法]
I need this result: K:\Data , where K:\ is a hard drive of the remote PC on LAN, and Data is shared folder on that drive.
如果您需要 远程 机器上分配的 K:
盘符到包含共享目录的驱动器,那么您可以 运行 net share
远程使用 PsExec 或类似的方法(前提是您在远程计算机上拥有具有足够权限的帐户)。
例如,假设\laptop
是局域网中的另一台机器,下面将列出\laptop
上的共享名和(远程)目录。
C:\etc>for /f "tokens=1,2" %u in ('psexec \laptop cmd /c net share 2^>nul') do @(
for /f "tokens=1,2 delims=:" %x in ("%u %v") do @(
if not "%y"=="" echo "\laptop\%u" = "%v" ) )
"\laptop\C$" = "C:\"
"\laptop\ADMIN$" = "C:\Windows"
"\laptop\DATA" = "K:\Data"
建议在线程技术中使用某些附加操作。
使用 WMIC 时,尽管禁用了防火墙,但我不得不 add local admin account to WMI Control Security property. As well, by running GPEDIT.msc enabled“允许入站远程管理例外”到防火墙规则。正确的查询如下,处理它的输出需要一个类似于 PsExec 批处理的批处理文件:
wmic /user:[username] /password:[password] /node:"PC-ID" share get
@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /f "tokens=1,2 skip=1 delims=:" %%u in ('wmic /user:[username] /password:[password] /node:"Laptop" share get') do @(
set "var1=%%u" & set "var2=%%v"
set "var1.1=!var1:~89,-1!" & set "var2=!var2:~0,33!" & set "var1.2=!var1:~97!" & set "var1.3=!var1.1:~0,4!"
if not "!var1.3!"=="IPC$" if not "!var1.1!"=="" echo \Laptop\!var1.1! = !var1.2!:!var2!)
exit /b
::Output
\Laptop\ADMIN$ = C:\WINDOWS
\Laptop\C$ = C:\
\Laptop\D$ = D:\
\Laptop\Data = K:\
\Laptop\K$ = K:\
\Laptop\Docs = K:\Other\Docs
\Laptop\print$ = C:\windows\system32\spool\drivers
当使用 PsExec 而不是 WMIC 时,我不得不 install it first, then add 在注册表中添加一个额外的键 LocalAccountTokenFilterPolicy,然后修改之前发布的命令:
@echo off
for /f "tokens=1,2" %%u in ('psexec64 -u [username] -p [password] \Laptop cmd /c net share 2^>nul') do @(
for /f "tokens=1,2 delims=:" %%x in ("%%u %%v") do @(
if not "%%y"=="" echo \Laptop\%%u = %%v ) )
exit /b
::Output
\Laptop\C$ = C:\
\Laptop\D$ = D:\
\Laptop\print$ = C:\windows\system32\spool\drivers
\Laptop\K$ = K:\
\Laptop\ADMIN$ = C:\WINDOWS
\Laptop\Data = K:\
\Laptop\Docs = K:\Other\Docs
我正在尝试使用 WMIC 或类似的网络工具 运行 从批处理中从 LAN PC 驱动器上文件夹的网络路径导出绝对或完整本地路径。经测试,此站点上的一些专用于类似任务的线程未在 Win 10 中提供有效的解决方案。
例如,当 运行在 Win 10 Cmd 中选择一个答案中的建议查询时,我得到:
C:\WINDOWS\system32>wmic share where "name='\Laptop\Data'" get path
Node - OFFICE
ERROR:
Description = Invalid query
C:\WINDOWS\system32>wmic share where "name='Data'" get path
No Instance(s) Available.
我需要这个结果:K:\Data,其中 K:\ 是 LAN 上远程 PC 的硬盘驱动器,Data 是该驱动器上的共享文件夹。
有人可以为该任务建议一个有效的查询和批处理吗? WMIC 文档过于广泛,如果没有丰富的工具使用经验,无法通过反复试验得出有效的查询。
wmic share where name='C$' get path
在这里工作(因为只有一个测试不需要双引号)。也是
wmic share where "name='C$'" get path
您发布的内容说您没有名为 data
的共享。
wmic share get /format:list
显示你所拥有的。
C:\Users\User>wmic share get
AccessMask AllowMaximum Caption Description InstallDate MaximumAllowed Name Path Status Type
TRUE Remote Admin Remote Admin ADMIN$ C:\Windows OK 2147483648
TRUE Default share Default share C$ C:\ OK 2147483648
TRUE Default share Default share D$ D:\ OK 2147483648
TRUE fred fred C:\Intel OK 0
TRUE Default share Default share G$ G:\ OK 2147483648
TRUE Remote IPC Remote IPC IPC$ OK 2147483651
TRUE TestC TestC C:\ OK 0
一如既往wmic /?
, wmic share /?
, wmic share call /?
, wmic share get /?
, wmic /format /?
.
对于远程计算机,您必须连接到该计算机(请参阅 wmic /node /?
)。
wmic /node:127.0.0.1 share get
下面列出了 local 机器上映射到(当前连接的)远程共享的驱动器号。
C:\etc>for /f "tokens=1-3" %x in ('net use') do @if /i "%x" equ "ok" echo %z = %y
\laptop\x$ = P:
\laptop\data = Q:
在 OP 编辑之后(突出显示 我的):
[+ 编辑 以获得正确的
net share
用法]
I need this result: K:\Data , where K:\ is a hard drive of the remote PC on LAN, and Data is shared folder on that drive.
如果您需要 远程 机器上分配的 K:
盘符到包含共享目录的驱动器,那么您可以 运行 net share
远程使用 PsExec 或类似的方法(前提是您在远程计算机上拥有具有足够权限的帐户)。
例如,假设\laptop
是局域网中的另一台机器,下面将列出\laptop
上的共享名和(远程)目录。
C:\etc>for /f "tokens=1,2" %u in ('psexec \laptop cmd /c net share 2^>nul') do @(
for /f "tokens=1,2 delims=:" %x in ("%u %v") do @(
if not "%y"=="" echo "\laptop\%u" = "%v" ) )
"\laptop\C$" = "C:\"
"\laptop\ADMIN$" = "C:\Windows"
"\laptop\DATA" = "K:\Data"
建议在线程技术中使用某些附加操作。
使用 WMIC 时,尽管禁用了防火墙,但我不得不 add local admin account to WMI Control Security property. As well, by running GPEDIT.msc enabled“允许入站远程管理例外”到防火墙规则。正确的查询如下,处理它的输出需要一个类似于 PsExec 批处理的批处理文件:
wmic /user:[username] /password:[password] /node:"PC-ID" share get
@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /f "tokens=1,2 skip=1 delims=:" %%u in ('wmic /user:[username] /password:[password] /node:"Laptop" share get') do @(
set "var1=%%u" & set "var2=%%v"
set "var1.1=!var1:~89,-1!" & set "var2=!var2:~0,33!" & set "var1.2=!var1:~97!" & set "var1.3=!var1.1:~0,4!"
if not "!var1.3!"=="IPC$" if not "!var1.1!"=="" echo \Laptop\!var1.1! = !var1.2!:!var2!)
exit /b
::Output
\Laptop\ADMIN$ = C:\WINDOWS
\Laptop\C$ = C:\
\Laptop\D$ = D:\
\Laptop\Data = K:\
\Laptop\K$ = K:\
\Laptop\Docs = K:\Other\Docs
\Laptop\print$ = C:\windows\system32\spool\drivers
当使用 PsExec 而不是 WMIC 时,我不得不 install it first, then add 在注册表中添加一个额外的键 LocalAccountTokenFilterPolicy,然后修改之前发布的命令:
@echo off
for /f "tokens=1,2" %%u in ('psexec64 -u [username] -p [password] \Laptop cmd /c net share 2^>nul') do @(
for /f "tokens=1,2 delims=:" %%x in ("%%u %%v") do @(
if not "%%y"=="" echo \Laptop\%%u = %%v ) )
exit /b
::Output
\Laptop\C$ = C:\
\Laptop\D$ = D:\
\Laptop\print$ = C:\windows\system32\spool\drivers
\Laptop\K$ = K:\
\Laptop\ADMIN$ = C:\WINDOWS
\Laptop\Data = K:\
\Laptop\Docs = K:\Other\Docs