设为首页 收藏本站
查看: 1416|回复: 0

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

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-5 09:51:51 | 显示全部楼层 |阅读模式
Windows Azure上连接虚拟机想必不是件难事尤其是连接Windows操作系统简单点几下鼠标通过远程桌面RDPWindows Azure虚拟机会帮助你自动创建远程连接RDP的Profile你就能体验到公有云带来的便利。由于虚拟机外部连接都是通过端口映射连接的。当然基于区域网络目前Azure.CN中新创建的虚拟网络已经都是区域网络了当然你目前仍然可以创建基于地缘组的虚拟网络虽然并不推荐后可以创建虚拟机实例级别的公共IP地址所以你也可以跳过通过"云服务"端口映射的RDP而直接连接虚拟机公共IP的3389端口。好吧说了这么多都是通过远程桌面对远程虚拟机进行管理的如果需要批量对虚拟机进行管理有什么方法呢在全球运营的Microsoft Azure上已经提供了自动化as a Service的自动化云服务 通过Powershell工作流运行手册批量定时管理虚拟机服务当然听上去很酷不过目前国内的自动化服务还要等等呢。可是如果我们希望通过Powershell脚本批量管理在国内Azure公有云上的虚拟机该如何操作呢这里把我用于演示的脚本和大家分享一下。
首先下载并安装最新的 Azure Powershell 注意本脚本只是在Powershell 4.0环境测试通过Azure中创建的Windows服务器虚拟机自动provision部署的时候后台会自动帮助启用Powershell基于https的WINRM访问而用到的证书正是"云服务FQDN"证书这个可以通过以下方式验证在Azure管理门户云服务证书中查看
wKioL1SAn8-DBQv1AACunwXiSiE456.jpg
来到Azure虚拟机中查看配置的Powershell已经启用了基于https的访问并且配置了访问证书的指纹就是"云服务"配置的证书指纹因此想通过Powershell远程访问云中的Windows 服务器虚拟机则需要再访问客户端安装相应的证书文件到本地受信任证书列表 CurrentUserMy下面脚本中就是将该证书安装到远程管理客户机的该位置。
wKiom1SAn0Hx3mfrAAEbsVGusmw630.jpg

(*注意* 这里的脚本没有做"云服务"下的虚拟机操作系统判断因为演示环境中所有虚拟机均为Windows Server 2012 R2的虚拟机。)
演示脚本远程执行脚本Invoke-command 的scriptblock中主要用于在Azure虚拟机中添加配置用户体验服务可以根据需要进行修改,另外如果需要交互式的环境也可以通过Enter-PSSession URI连接虚拟机的URI管理。
实际演示中需要指定参数订阅名称云服务名称 Remote-configAzVM.ps -Subscriptionname "订阅名"-Servicename "云服务名"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Param
(
    [Parameter(Mandatory=$false,Position=0)]
    [String]$SubscriptionName,
    [Parameter(Mandatory=$false)]
    [String]$Servicename,
     [Parameter(Mandatory=$false)]
    [String]$Path = (Get-Location)
)


# Elevate to admin
Write-Host "Checking for elevation... " -NoNewline
$CurrentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
if (($CurrentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::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:CurrentUserMy$winRmCertificateThumbprint-ErrorAction SilentlyContinue

    if($installedCert -eq$null)
    {
        $certBytes= [System.Convert]::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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-36338-1-1.html 上篇帖子: shell 通配符和正则表达式理解和区别 下篇帖子: SHELL 系统文件完整性校验 Windows 虚拟机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表