如何以另一个用户身份修改网络共享上的文件/文件夹?

时间:2019-07-01 21:03:34

标签: powershell azure-devops

摘要

作为我们在DevOps上构建过程的一部分,我试图将构建工件复制到内部网络共享上的特定文件夹中。问题是,尽管构建代理位于我们的内部网络上,但DevOps服务没有访问任何网络共享的权限。

我认为我可以通过在执行该工作的PowerShell脚本中提供有效的登录凭据来解决此问题,但是我很难让凭据被接受。尽管似乎可以在没有凭据的情况下查看文件夹结构,但实际上进行修改(创建/删除文件和/或文件夹)却给了我拒绝访问或拒绝身份验证的消息。

我尝试过的东西

起初,我在做一个非常简单的创建文件夹命令:

# NETWORK_SHARE would be the internal IP of the target public folder on the network, like 12.345.678.90
New-Item -Path "NETWORK_SHARE\path\to\folder" -ItemType Directory

但这给了我一个拒绝访问错误:

  

New-Item:拒绝访问“文件夹”路径。

然后,我进行了一些研究,并认为,如果我提供了有效用户的凭据,它将使我能够这样做。这是简单的测试命令。应该在指定位置创建一个新文件夹:

$username = "MyUsername"
$password = ConvertTo-SecureString "MyPassword" -AsPlainText -Force
$credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password

# NETWORK_SHARE would be the internal IP of the target public folder on the network, like 12.345.678.90
Invoke-Command -ComputerName "NETWORK_SHARE" -ScriptBlock { New-Item -Path $args[0] -ItemType Directory } -Cred $credentials -Authentication Credssp -ArgumentList "NETWORK_SHARE\path\to\folder"

我得到的错误如下:

  

连接到远程服务器NETWORK_SHARE失败,并显示以下错误消息:WinRM客户端无法处理该请求。 CredSSP   当前在客户端配置中禁用身份验证。更改客户端配置,然后重试该请求。还必须在服务器配置中启用CredSSP身份验证。另外,必须编辑组策略以允许将凭据委派给目标计算机。使用gpedit.msc并查看以下策略:计算机配置->管理模板->系统->凭据委派->允许委派新凭据。验证它是否已启用并配置了适用于目标计算机的SPN。例如,对于目标计算机名称“ myserver.domain.com”,SPN可以是以下之一:WSMAN / myserver.domain.com或WSMAN / *。domain.com

它甚至看起来都不像在尝试进行身份验证,它只是立即吐出上面的错误。我不确定如何进行调试。如有必要,我可以更改构建代理,但是我无法更改目标网络共享上的任何配置,因为这是由IT团队维护的,并且他们对将驱动器开放到互联网非常严格。有没有一种方法可以成功进行身份验证以在网络共享上创建新文件夹,而无需更改目标上的任何配置?

1 个答案:

答案 0 :(得分:0)

我最终采取了非Powershell的方法。由于可以访问构建代理,因此我将DevOps服务配置为使用有效用户的凭据而不是默认的“网络服务”用户的凭据运行。这为DevOps服务授予了它所需的所有权限,并且我能够编写一个简单的PS脚本来创建/复制/删除网络共享上的文件夹。