xiaochuan 发表于 2018-9-2 13:23:00

通过Powershell远程管理Windows Azure上的虚拟机

Param  
(
  
   
  
    $SubscriptionName,
  
   
  
    $Servicename,
  
   
  
    $Path = (Get-Location)
  
)
  

  

  
# Elevate to admin
  
Write-Host "Checking for elevation... " -NoNewline
  
$CurrentUser = New-Object Security.Principal.WindowsPrincipal $(::GetCurrent())
  
if (($CurrentUser.IsInRole(::Administrator)) -eq$false) {
  
    $ArgumentList= "-noprofile-noexit -file `"{0}`" -Path `"$Path`""
  
    If($DeploymentOnly) {$ArgumentList = $ArgumentList +" -DeploymentOnly"}
  
    Write-Host"elevating"
  
    Start-Processpowershell.exe -VerbRunAs -ArgumentList($ArgumentList -f($myinvocation.MyCommand.Definition))
  
    Exit
  
}
  

  

  
Select-AzureSubscription -SubscriptionName $SubscriptionName -Current
  
$Validate = $true
  

  
# Check Current PS Version
  
If ($PSVersionTable.PSVersion.Major -lt 4) {Write-Error "Only Supports PowerShell Version 4 or Higher!";$Validate =$false}
  

  
if ($Validate)
  
{
  
function Install-WinRmCertificate($ServiceName, $VMName)
  
{
  
    $vm= Get-AzureVM-ServiceName $ServiceName-Name $VMName
  
    $winRmCertificateThumbprint= $vm.VM.DefaultWinRMCertificateThumbprint
  

  
    $winRmCertificate= Get-AzureCertificate-ServiceName $ServiceName`
  
      -Thumbprint$winRmCertificateThumbprint -ThumbprintAlgorithm sha1
  

  
    $installedCert= Get-Item Cert:\CurrentUser\My\$winRmCertificateThumbprint-ErrorAction SilentlyContinue
  

  
    if($installedCert -eq$null)
  
    {
  
      $certBytes= ::FromBase64String($winRmCertificate.Data)
  
      $x509Cert= New-ObjectSystem.Security.Cryptography.X509Certificates.X509Certificate
  
      $x509Cert.Import($certBytes)
  

  
      $store= New-ObjectSystem.Security.Cryptography.X509Certificates.X509Store"Root","LocalMachine"
  
      $store.Open("ReadWrite")
  
      $store.Add($x509Cert)
  
      $store.Close()
  
    }
  
}
  

  
$VMnames = (Get-AzureVM -ServiceName $ServiceName).HostName
  
foreach ($VMname in $VMnames)
  
    {
  
    Install-WinRmCertificate-ServiceName $ServiceName-VMName $VMname
  
    $VMwinRmUri= Get-AzureWinRMUri-ServiceName $ServiceName-Name $VMname
  
    $credential= Get-Credential
  

  
    Start-Job-ScriptBlock{
  
            Invoke-Command -URI $VMwinRmUri -Credential $credential -ScriptBlock {
  
                  Install-WindowsFeature -nameDesktop-Experience `
  
                  -IncludeAllSubFeature -Restart-Force}}
  
    }
  
}


页: [1]
查看完整版本: 通过Powershell远程管理Windows Azure上的虚拟机