使用 powershell 在 Azure VM 上启动和停止 windows 服务
Start and stop windows service on a Azure VM using powershell
使用powershell,我需要做以下步骤
1. 登录 Azure 帐户。
2. 从映像创建 VM。
3. 在图像中,当我们创建 VM 时,有 windows service.So,那个 windows 服务已经 运行ning 在 it.Stop 那个服务上。
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 : 停止服务的命令是
停止服务 -Name "CPS Dev UniSimServices" -Force
但是如果我登录到 VM 并 运行 这个命令,这会起作用。我想通过 powershell 从远程机器本身连接到新创建的 VM(无需登录),并停止服务。我该怎么做?
您可以使用扩展程序与 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。
要停止服务,请使用以下命令 Stop-Service -Name "NameOfService" -Force
,如有任何问题,请查看 Stop-Service 的文档。然后通过 robocopy、Copy-Item 或其他方式复制您需要的文件 Start-Service -Name "NameOfService"
。如果您在将文件从本地或远程计算机复制到 VM 时遇到任何问题,只需 post 即可。
如其他答案所述,您可以使用 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}
使用powershell,我需要做以下步骤
1. 登录 Azure 帐户。
2. 从映像创建 VM。
3. 在图像中,当我们创建 VM 时,有 windows service.So,那个 windows 服务已经 运行ning 在 it.Stop 那个服务上。
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 : 停止服务的命令是
停止服务 -Name "CPS Dev UniSimServices" -Force
但是如果我登录到 VM 并 运行 这个命令,这会起作用。我想通过 powershell 从远程机器本身连接到新创建的 VM(无需登录),并停止服务。我该怎么做?
您可以使用扩展程序与 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。
要停止服务,请使用以下命令 Stop-Service -Name "NameOfService" -Force
,如有任何问题,请查看 Stop-Service 的文档。然后通过 robocopy、Copy-Item 或其他方式复制您需要的文件 Start-Service -Name "NameOfService"
。如果您在将文件从本地或远程计算机复制到 VM 时遇到任何问题,只需 post 即可。
如其他答案所述,您可以使用 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}