Powershell:使用 SYSTEM 用户创建和断开网络映射驱动器

Powershell:使用 SYSTEM 用户创建和断开网络映射驱动器

我需要使用 SYSTEM 用户映射网络驱动器,我创建了一个由计划任务运行的 PS1,第一部分成功映射了驱动器:

$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("y:", "\\SAN_SERVER\folder1", $false, "domain\service_user", "password")

映射之后,会发生很多事情,复制文件等

在脚本的末尾需要断开映射驱动器的连接:

& 'D:\Scripts\PsExec64.exe' -s cmd /c "net use y: /delete /yes"

如果我从我的用户帐户手动运行此命令(我需要以管理员身份启动 PS),则该命令有效,但是它不适用于计划任务中的脚本,我正在使用 PsExec64.exe,因为我发现由于网络驱动器已映射 domain\user,因此除非我们使用 PsExec64.exe,否则它只能与 domain/service_user 断开连接,有没有办法使用不同的凭据断开驱动器的连接?

答案1

我暂时假设您出于兼容性/遗留原因而不使用本机新-PSDrive来自 Powershell 脚本的 cmdlet。

那么既然你已经在使用旧版地图网络驱动器来自 WScript.Network,为什么你要使用net usepsexec,而不是仅仅使用它的合作伙伴,移除网络驱动器

答案2

考虑不使用驱动器号。即使在 2.0 版中,Powershell 也允许您在使用文件系统时广泛使用 UNC 路径。因此,您基本上可以直接定位位置,而无需 PSDrive 或驱动器号。那么您不必映射任何东西,也不需要取消映射它们。

#as the service account
Set-Location \\SAN_SERVER\folder1
#this is the same as net use y: \\SAN_SERVER\folder1;cd y:

然后只需使用相对路径进行文件操作即可。您还可以将服务器名称和文件夹路径分配给变量,以便"$server\$folderpath\"代替驱动器号使用。

答案3

我找到了答案,但它太愚蠢了......

& net use y: /delete /yes

这在通过 SYSTEM 的计划任务运行时有效。只需添加 &,就表明我缺乏 PS 技能。哦天哪

相关内容