2017-01-09 81 views
2

新PSDrive似乎在作为一个作业提交时,在脚本块中工作,它交互作为一个脚本块工作良好。PowerShell新PSD驱动器没有映射驱动器

这可以作为一个正常的交互脚本块:

$getcred = Get-Credential 'myuser' 
$servers = "myserver" 
$jsession = New-PSSession -ComputerName $servers -Credential $getcred 
Invoke-Command -ScriptBlock { 
New-PSDrive -name share1 -psprovider FileSystem -root \\server\directory; 
dir share1: 
}; 

这不会安装驱动器:

$getcred = Get-Credential 'myuser' 
$servers = "myserver" 
$jsession = New-PSSession -ComputerName $servers -Credential $getcred 
$job = Invoke-Command -Session $jsession -AsJob -Jobname 'testjob' -ScriptBlock { 
New-PSDrive -name share1 -psprovider FileSystem -root \\server\directory; 
dir share1: 
}; 
Wait-Job $job 
$r = Receive-Job $job 
$r 

找不到驱动。名称为'share1'的驱动器不存在。

看来安全上下文没有在会话上传输?

+0

你确定原来的例子在工作之外工作?这个问题应该如我在答复中提到的那样,并且在有或没有工作的情况下发生。问题应该是invoke-command的双重跳跃,而不是作业。 –

回答

0

在您的示例中,您使用凭证创建与远程计算机的连接,但会话本身未使用能够进行第二跳的令牌。会议使用了所谓的网络登录。

您指出Invoke-Command内的New-PSDrive在未用作工作的一部分时工作正常 - 但请确认。

在脚本块中尝试此行 - 请注意添加-Credential以将连接该会话的用户显式映射到该驱动器。

New-PSDrive -name share1 -psprovider FileSystem -root \\server\directory -Credential $using:getcred 

您还可以CredSSP解决这个问题,但有其他安全隐患而没有必要简单的远程文件共享访问。

将凭证以这种方式传递到远程服务器应该仍然只能用于您信任的服务器。

+0

我可以100%确认发布的问题中的第一个示例有效,第二个区段不起作用。我会尝试在最后添加$使用。 –

+0

您可能在远程服务器上拥有先前映射的驱动器,该驱动器已映射了明确的凭证。我不太清楚这项工作会如何干扰这一点,但我建议在映射PS驱动器之前调用'get-psdrive'和'get-smbmapping'来查看预先存在的内容。 –

+0

不,它不是在尝试使用一台从未连接过的全新服务器。 –

-2

您正试图在一行中运行多个命令。

invoke-command 

用于一次运行单个命令。

建立到远程计算机的持续性连接(连续执行多个命令)使用方法:

Enter-PSSession 

如果你仍然想使用你的脚本的版本,她那应该怎么做

$getcred = Get-Credential 'myuser' 
$servers = "myserver" 

$jsession = New-PSSession -ComputerName $servers -Credential $getcred 

$job = Invoke-Command -Session $jsession -ScriptBlock { New-PSDrive -name share1 -psprovider FileSystem -root \\server\directory } 
$job2 = Invoke-Command -Session $jsession -ScriptBlock {dir share1:} 

$job 
$job2 
+0

你收到了什么错误信息? – YanivK

+1

那不是真的Invoke-command在我的第一个工作示例中可以有多个命令。我需要使用许多计算机上的网络对象上的文件连续执行一系列几个命令。 AsAJob应该是理想的,因为它在后台进行。你的例子和我的第二部分一样失败,但我知道它不是基于许可的问题,因为我的第一个例子工作。 –

+0

我没有看到一个foreach或任何开始过程在脚本示例中结束。 – YanivK