7

tôi có hai máy chủ:Làm thế nào để từ xa thực thi một kịch bản từ xa cao trong PowerShell

  • Servera (Windows 2003 Server)
  • ServerB (cửa sổ 7)

Servera chứa một thư mục với một tập tin thực thi (deploy.bat) cần phải được thực hiện từ một dấu nhắc PowerShell cao. Trong ServerA, nếu tôi chạy nó từ lời nhắc bình thường hoặc lời nhắc powerhell thì không thành công. Nếu tôi chạy nó từ một dấu nhắc nâng nó hoạt động. (chạy như quản trị viên).

Sự cố tôi gặp phải khi cố gắng thực thi tệp lô từ serverB bằng cách sử dụng thực thi quyền hạn từ xa. Tôi có thể thực hiện bằng lệnh này:

Invoke-Command -computername serverA .\remotedeploy.ps1 

Nội dung của remotedeploy.ps1 là:

cd D:\Builds\build5 
.\Deploy.bat 

tôi đã xem xét một câu hỏi rất nhiều trong stackoverflow về:

  • Execute một powershell từ xa (Điều này làm việc cho tôi)
  • Thực hiện một powerhell địa phương với dấu nhắc nâng lên (tôi có thể làm điều đó)

Câu hỏi này là về cả hai cùng một lúc. Vì vậy, câu hỏi chính xác là:

Có thể thực thi tập lệnh REMOTE TỪ XA trong PowerShell không?

Trả lời

1

Bạn có cố gắng thay đổi remoteDeploy.ps1 để bắt đầu CMD.EXE với quyền cao:

cd D:\Builds\build5 
start-process CMD.EXE -verb runas -argumentlist "-C",".\Deploy.bat" 
+0

Tôi nghĩ rằng tôi đã thử điều này nhưng yêu cầu tôi nhập mật khẩu (không phải tùy chọn khi tôi cần nó để chạy trong tập lệnh xây dựng) và dường như không có tùy chọn để đặt mật khẩu. Tôi sẽ thử lại ngay bây giờ để chắc chắn. –

+0

Nó không hoạt động. Khi thực hiện nó cục bộ một cửa sổ hình thức nhanh chóng yêu cầu tôi cho phép và khi tôi thực hiện từ xa nó, đóng băng vì cùng một cửa sổ mẫu nhắc tôi đoán. –

+1

Có vẻ như tôi làm việc với tôi, nhưng tôi sử dụng thông tin đăng nhập thực sự, khi tôi tạo PSSession của mình. – JPBlanc

1

Nếu bạn đang sử dụng PowerShell 4, bạn có thể thực hiện lệnh sử dụng Cấu hình nhà nước mong muốn, mà chạy như SYSTEM:

Invoke-Command -ComputerName ServerA -ScriptBlock { 
    configuration DeployBat 
    { 
     # DSC throws weird errors when run in strict mode. Make sure it is turned off. 
     Set-StrictMode -Off 

     # We have to specify what computers/nodes to run on. 
     Node localhost 
     { 
      Script 'Deploy.bat' 
      { 
       # Code you want to run goes in this script block 
       SetScript = { 
        Set-Location 'D:\Builds\build5' 
        # DSC doesn't show STDOUT, so pipe it to the verbose stream 
        .\Deploy.bat | Write-Verbose 
       } 

       # Return $false otherwise SetScript block won't run. 
       TestScript = { return $false } 

       # This must returns a hashtable with a 'Result' key/value. 
       GetScript = { return @{ 'Result' = 'RUN' } } 
      } 
     } 
    } 

    # Create the configuration .mof files to run, which are output to 
    # 'DeployBot\NODE_NAME.mof' directory/files in the current directory. The default 
    # directory when remoting is C:\Users\USERNAME\Documents. 
    DeployBat 

    # Run the configuration we just created. They are run against each NODE. Using the 
    # -Verbose switch because DSC doesn't show STDOUT so our resources pipes it to the 
    # verbose stream. 
    Start-DscConfiguration -Wait -Path .\DeployBat -Verbose 
} 
Các vấn đề liên quan