在powershell中将文件复制到远程服务器

时间:2017-05-30 09:46:46

标签: powershell batch-file jenkins

我正在配置Jenkins作业,Jenkins slave安装在Windows服务器(A)中。我想将项目构建输出文件夹复制到另一个Windows服务器(B)。

我可以在服务器A上手动执行批处理文件,其中包含以下内容。

powershell -executionpolicy remotesigned -Command Copy-Item "C:\Jenkins\workspace\DEV_Build\DEPLOY\UAT\build" -Destination "\\SYDUATAPP01\E$\build" -recurse

然而,当我通过Jenkins执行这个批处理文件时,我收到一个错误" Access Denied"

Access is denied
 + CategoryInfo          : NotSpecified: (:) [Copy-Item], UnauthorizedAcces 
   sException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.Pow 
   erShell.Commands.CopyItemCommand

感谢您的帮助.....如果通过powershell无法实现,我想知道我在Jenkins工作中复制文件的其他选择

2 个答案:

答案 0 :(得分:1)

作为管理员,检查您是否将-executionpolicy设置为预期

powershell get-executionpolicy

如果没有那么作为管理员,运行:

powershell set-executionpolicy remotesigned -force

然后我不能100%确定为什么要将其作为批处理文件运行,而只是将其另存为.ps1文件。

Copy-Item -Path "C:\Jenkins\workspace\DEV_Build\DEPLOY\UAT\build" -Destination "\\SYDUATAPP01\E$\build" -recurse

您还可以使用-Force -PassThru -Verbose

如果您仍想将其作为批处理文件运行,则只需运行

powershell Copy-Item -Path "C:\Jenkins\workspace\DEV_Build\DEPLOY\UAT\build" -Destination "\\\SYDUATAPP01\E$\build" -recurse

编辑要以管理员身份运行脚本,您可以将其复制到脚本的最顶层。它基本上只创建一个VBS文件,以管理员身份启动批处理。最初它会弹出UAC提示,但它只是一次交易,从那里它将以管理员身份每次运行脚本。

@echo off 
 >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
   if '%errorlevel%' NEQ '0' (
    echo Checking privileges.
    goto UPrompt
      ) else ( goto Admin )
:UPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\Admin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\Admin.vbs"

    "%temp%\Admin.vbs"
    exit /B
:Admin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\Admin.vbs" )
     pushd "%CD%"
     CD /D "%~dp0"
:----------------- Copy the rest of your Batch below this line------

答案 1 :(得分:0)

@Gergard,非常感谢你的帮助。我尝试将提供的代码段作为管理员运行。然而,没有任何效果。执行政策被重新调整。

最后,下面的步骤解决了我的问题;

  • 我在Windows远程奴隶上安装了Powershell插件(1.3)。 Powershell 1.3,由" ByPass"执行政策

  • 并从powershell添加了一个步骤来复制项目。

    Copy-Item"源路径" -Destination" \ destination path" -recurse

  • 上述步骤并未解决问题,仍然抱怨未经授权。

  • 然后我配置了jenkins远程从属进程 - >属性 - >以管理员帐户运行。

这解决了问题,现在我能够成功复制文件。