使用powershell发送和解压缩zip文件到azure VM

问题描述 投票:0回答:2

我正在尝试将zip文件发送并提取到azure VM,但是无法建立与远程Azure VM的连接。

代码

$cred = Get-Credential
$SO = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
$session = New-PSSession -ConnectionUri 'http://xx.xx.xxx.xxx:3389' -Credential $cred -SessionOption $SO

Send-File -Path C:\testArchive.zip -Destination C:\ -Session $session
Expand-Archive -Path C:\testArchive.zip -DestinationPath C:\ -Session $session

错误

New-PSSession : [xx.xx.xxx.xxx] Connecting to remote server xx.xx.xxx.xxx 
failed with the following error message : The client cannot connect to the 
destination specified in the request. Verify that the service on the 
destination is running and is accepting requests. Consult the logs and 
documentation for the WS-Management service running on the destination, most 
commonly IIS or WinRM. If the destination is the WinRM service, run the 
following command on the destination to analyze and configure the WinRM 
service: "winrm quickconfig". For more information, see the 
about_Remote_Troubleshooting Help topic.
At line:4 char:12
+ $session = New-PSSession -ConnectionUri 'http://xx.xx.xxx.xxx:3389' - ...
+            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:Re 
   moteRunspace) [New-PSSession], PSRemotingTransportException
    + FullyQualifiedErrorId : CannotConnect,PSSessionOpenFailed

以下是我在azure VM上运行'winrm quickconfig'命令时的输出

WinRM service is already running on this machine.
WinRM is already set up for remote management on this computer.

当我运行'Enter-PSSession -ComputerName LoadTestVm -Port 3389 -Credential qa-admin'

Enter-PSSession : Connecting to remote server LoadTestVm failed with the following error 
message : The WinRM client cannot process the request because the server name cannot be 
resolved. For more information, see the about_Remote_Troubleshooting Help topic.
At line:1 char:1
+ Enter-PSSession -ComputerName LoadTestVm -Port 3389 -Credential qa-ad ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (LoadTestVm:String) [Enter-PSSession], PSRem 
   otingTransportException
    + FullyQualifiedErrorId : CreateRemoteRunspaceFailed
powershell virtual-machine rdp winrm azure-vm
2个回答
1
投票

这实际上不是风险管理/安全方面的最佳实践。

<#
$username = 'qa-admin'
$pass = ConvertTo-SecureString -string 'xxxxxxxx' -AsPlainText -Force
#>

此...

<#
$cred = New-Object -typename System.Management.Automation.PSCredential -argumentlist $username, $pass
#>

...为此提供了一个内置cmdlet。

请勿在脚本中传递明文密码。要么:

  1. 提示他们
  2. 从安全的预先创建的文件中读取它们

Quickly and securely storing your credentials – PowerShell

Working with Passwords, Secure Strings and Credentials in Windows PowerShell

  1. 来自Windows凭据管理器

CredentialManager 2.0

Accessing Windows Credentials Manager from PowerShell

How to Manage Secrets and Passwords with CredentialManager and PowerShell

$cred = Get-Credential -Credential $env:USERNAME

此...

$session = New-PSSession -ConnectionUri 'http://xx.xx.xxx.xxx:3389' -Credential $cred -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck)

...不正确。你不能做这个。您需要将上述结果传递给-SessionOption参数。

Get-Help -Name New-PSSessionOption -Examples

<#
NAME
    New-PSSessionOption

SYNOPSIS
    Creates an object that contains advanced options for a PSSession.


Example 1: Create a default session option

    PS C:\>New-PSSessionOption
...

This command creates a session option object that has all of the default values.
Example 2: Configure a session by using a session option object

    PS C:\>$pso = New-PSSessionOption -Culture "fr-fr" -MaximumReceivedObjectSize 10MB
    PS C:\>New-PSSession -ComputerName Server01 -SessionOption $pso

...

Example 3: Start an interactive session

    PS C:\>Enter-PSSession -ComputerName Server01 -SessionOption (New-PSSessionOption -NoEncryption -NoCompression)

...
Example 4: Modify a session option object

    PS C:\>$a = New-PSSessionOption
...

PS C:\> $a.UICulture = (Get-UICulture)
PS C:\> $a.OpenTimeout = (New-Timespan -Minutes 4)
PS C:\> $a.MaximumConnectionRedirectionCount = 1
PS C:\> $a

...

Example 5: Create a preference variable

    PS C:\>$PSSessionOption = New-PSSessionOption -OpenTimeOut 120000

...

Example 6: Fulfill the requirements for a remote session configuration

    PS C:\>$skipCN = New-PSSessionOption -SkipCNCheck
    PS C:\>New-PSSession -ComputerName 171.09.21.207 -UseSSL -Credential Domain01\User01 -SessionOption $SkipCN

...

Example 7: Make arguments available to a remote session

    PS C:\>$team = @{Team="IT"; Use="Testing"}
    PS C:\>$TeamOption = New-PSSessionOption -ApplicationArguments $team
    PS C:\>$s = New-PSSession -ComputerName Server01 -SessionOption $TeamOption
    PS C:\>Invoke-Command -Session $s {$PSSenderInfo.SpplicationArguments}

...

    PS C:\>Invoke-Command -Session $s {if ($PSSenderInfo.ApplicationArguments.Use -ne "Testing") {.\logFiles.ps1} else {"Just testing."}}
...
#>

所以,你是...

$SO       = New-PSSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
$session  = New-PSSession -ConnectionUri 'http://xx.xx.xxx.xxx:3389' -Credential $cred -SessionOption $SO

# Process other actions
Send-File -Path C:\testArchive.zip -Destination C:\ -Session $session
Expand-Archive -Path C:\testArchive.zip -DestinationPath C:\ -Session $session

1
投票

WINRM将在端口5985和5986上运行。端口5985用于HTTP,端口5986用于HTTPS。默认情况下,如果未使用-port指定端口5985,它将使用端口5985。您应该指定端口5985而不是3389,如果有,还应在NSG中启用它。这样就可以运行Enter-PSSession -ComputerName "PublicIPaddress of VM" -Port 5985 -Credential $cred

这对我有利。

Copy-Item -Path D:\nancy\4.zip -Destination C:\ –ToSession $session

Invoke-Command -Session $session -ScriptBlock { Expand-Archive -Path C:\4.zip -DestinationPath C:\ }

更多参考:

https://www.assistanz.com/access-azure-windows-vm-through-powershell/

https://geekdudes.wordpress.com/2016/11/16/enabling-remote-powershell-connection-to-azure-virtual-machine/

https://mohitgoyal.co/2016/11/10/enable-powershell-remoting-on-azure-rm-virtual-machines/

© www.soinside.com 2019 - 2024. All rights reserved.