1

我正在尝试使用 Invoke-Command 在远程计算机上映射网络驱动器:

Invoke-Command -ComputerName servername -ScriptBlock { net use L: \\server\folder password /user:login}

但它不起作用。简单的 NET USE 也不起作用。我也尝试过Powershell: how to map a network drive with a different username/password

那么,如何在远程计算机上运行“cmd 命令”NET USE?或者如何用powershell映射网络驱动器?谢谢

编辑

当我使用

Invoke-Command -ComputerName servername -ScriptBlock { (New-Object -ComObject WScript.Network).MapNetworkDrive 
("M:", "\\server\folder", $false, "login", "password") }

它将创建一些仅在远程计算机上可见的“影子”磁盘,使用:

Invoke-Command -ComputerName servername -ScriptBlock { NET USE }

并且可以使用以下方法删除:

Invoke-Command -ComputerName servername -ScriptBlock { NET USE /d /y M: }

但是当我连接到远程服务器时,我看不到、删除或添加映射的磁盘:(

4

3 回答 3

1

我必须使用计划任务来完成。

创建一个包含映射文本的标准 bat 文件。

`

net use R: /Delete /y
net use R: "\\SERVERNAME\R" /persistent:yes
net use S: /Delete /y
net use S: "\\SERVERNAME\S" /persistent:yes

`

使用计划任务作业信息创建 XML

`

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2016-03-12T14:19:18.8527017</Date>
    <Author>DOMAIN\USER</Author>
  </RegistrationInfo>
  <Triggers />
  <Principals>
    <Principal id="Author">
      <GroupId>S-1-5-32-544</GroupId>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>I:\Scripts\Schedualed Taks XML\Maps.bat</Command>
    </Exec>
  </Actions>
</Task>

`

使用批处理文件创建任务 (schtasks.exe)

`

@echo off
if exist "exists.txt" del "exists.txt"
for /F %%A in (SNL.txt) do (

Echo %%A

schtasks.exe /create /f /tn "Map Drives" /XML "I:\Scripts\Schedualed Taks XML\DriveMaps.xml" /s %%A


)
pause

`

注意: SNL.txt 是您希望在其上创建任务的计算机列表。

然后使用批处理文件运行任务(如果需要,您可以制作这个批处理文件)

`

@echo off
if exist "exists.txt" del "exists.txt"
for /F %%A in (SNL.txt) do (

Echo %%A

schtasks.exe /run /s %%A /tn "Map Drives" 

)

Pause

`

于 2016-10-13T04:38:25.710 回答
0

尝试这个:

Invoke-Command -ComputerName servername -ScriptBlock {
  (New-Object -ComObject WScript.Network).MapNetworkDrive(
      "L:", "\\server\share", $false, "login", "password"
    )
}

编辑:当我运行以下命令时

Invoke-Command -ComputerName ServerB -ScriptBlock {
  (New-Object -ComObject WScript.Network).MapNetworkDrive(
      "L:", "\\ServerC\share", $true, "DOMAIN\UserB", "password"
    )
}

DOMAIN\UserAon ServerA,它连接\\ServerC\share为驱动器L:就好ServerB了。ServerB然后,当我以身份登录时DOMAIN\UserA,我可以看到驱动器,但会收到一条警告,指出并非所有网络驱动器都可以重新连接。这是很自然的,因为 UserA 和 UserB 有不同的密码。当我点击驱动器时,系统要求提供 DOMAIN\UserB 的凭据,当我输入密码时,我可以正常访问共享。

于 2012-09-13T14:06:07.740 回答
0

根据这篇文章,没有 CredSSP 是不可能的吗?我正在尝试做同样的事情=(

于 2013-11-27T19:50:53.500 回答