使用Powershell在Azure VM上启动和停止Windows服务

时间:2018-08-24 07:31:05

标签: azure powershell windows-services azure-virtual-machine

使用powershell,我需要执行以下步骤。
1.登录到Azure帐户。
2.从映像创建VM。
3.在该映像中,有Windows服务。因此,当我们创建VM时,该Windows服务已经在其上运行。停止该服务。
4.将一些二进制文件复制到VM的特定文件夹中。
5.再次启动服务。

在所有这些中,我能够实现1和2步。我找不到其余步骤的任何相关过程。下面是我用来做1和2的脚本。

Login-AzureRMAccount    

$UserName = "username@organization.com"
$Password = ConvertTo-SecureString "password" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($UserName, $Password)    
New-AzureRmVm `
    -ResourceGroupName "RGN" `
    -Name "VMName" `
    -ImageName "ImageName" `
    -Location "West US" `
    -Credential $psCred

任何人都可以帮助我或指导我如何完成其​​余步骤。
预先感谢您的宝贵时间。

EDIT :用于停止服务的命令是
    停止服务-名称“ CPS Dev UniSimServices”-强制

但是,如果我登录到VM并运行此命令,则此方法有效。我想通过Powershell从远程计算机本身连接到新创建的VM(无需登录),然后停止该服务。我该怎么办?

2 个答案:

答案 0 :(得分:2)

您可以使用扩展名与VM进行交互,而无需连接它。您可以将PowerShell命令与自定义脚本一起使用:

Set-AzureRmVMExtension -ResourceGroupName "myResourceGroupAutomate" `
    -ExtensionName "IIS" `
    -VMName "myVM" `
    -Location "EastUS" `
    -Publisher Microsoft.Compute `
    -ExtensionType CustomScriptExtension `
    -TypeHandlerVersion 1.8 `
    -SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}'

更新

如果您确实要为扩展使用自定义脚本,则可以使用如下命令:

Set-AzureRmVMCustomScriptExtension -ResourceGroupName myResourceGroup `
    -VMName myVM `
    -Location myLocation `
    -FileUri myURL `
    -Run 'myScript.ps1' `
    -Name DemoScriptExtension

有关更多详细信息,请参见Set-AzureRmVMCustomScriptExtension

答案 1 :(得分:1)

要停止服务,请使用以下命令Stop-Service -Name "NameOfService" -Force,请查看Stop-Service的文档中是否有任何问题。然后通过robocopy,Copy-Item或其他方法Start-Service -Name "NameOfService"复制所需的文件。如果您在将文件从本地或远程计算机复制到VM时遇到任何问题,只需将其发布。

如另一个答案中所述,您可以使用Set-AzureRmVMCustomScriptExtension,以下示例在VM中执行脚本,该脚本上传到Blob存储帐户

Set-AzureRmVMCustomScriptExtension -ResourceGroupName $ResourceGroup -Location $LocationName -VMName $ServersName -Name $scriptName -StorageAccountName $NameStorageAccount -FileName $fileName -Run $fileName -ContainerName $NameCOntainerStorage -Argument "-param1 $param1" 

另一个选择是使用命令Invoke-AzureRmVMRunCommand,例如

Invoke-AzureRmVMRunCommand -ResourceGroupName $ResourceGroup -Name $ServersName -CommandId 'RunPowerShellScript' -ScriptPath "pathToFileExecute" -Parameter @{"Param" = "$Param"}

注意:参数-ScriptPath可以是共享路径,例如\ VM \ e $ \ script.ps1或本地路径。

最后一个选项是使用Invoke-Command,例如:

Invoke-command -ComputerName $server -crdential $objectcredential -scriptblock {Stop-Service -Name "nameService" -force}