Стандартный отказ от ответственности, очень новый для удаленных машин PowerShell и Azure. Вот мой сценарий PowerShell. Не работает эта команда:
$ setupSession = New-PSSession -ComputerName $ pip -Port 5986 -Credential $ serviceCreds -UseSSL
вот мой сценарий.
# Variables for common values
$resourceGroup = "rgTest"
$location = "East US"
$vmName = "vmTest"
$SubscriptionName = "subscription test"
$StorageAccountName = "sanTest"
$NetworkSecurityGroupName = "nsgTest"
$myNic = 'nicTest'
$MYvNET = 'vnetTest'
$myNetworkSecurityGroupRuleHTTP = 'nsgruleHTTPTest'
$myNetworkSecurityGroupRuleRDP = 'nsgruleRDPTest'
$myNetworkSecurityGroupRuleWWW = 'nsgruleWWWTest'
$myNetworkSecurityGroupRulePS = 'nsgrulePSTest'
$myNetworkSecurityGroup = 'nsgTest'
$rcgTest = 'rcgTest'
$secpasswd = ConvertTo-SecureString "password1" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential("test@user.org", $secpasswd)
Add-AzureRmAccount -Credential $cred
Login-AzureRmAccount -Credential $cred
Select-AzureRmSubscription -SubscriptionName $SubscriptionName
Get-AzureRmResourceGroup -Name $resourceGroup -ev notPresent -ea 0
if ($notPresent)
{
New-AzureRmResourceGroup -Name $resourceGroup -Location $location
}
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24
New-AzureRmStorageAccount `
-Location $Location `
-ResourceGroupName $ResourceGroup `
–StorageAccountName $StorageAccountName `
-SkuName Standard_GRS `
-SubscriptionName $SubscriptionName
$vnet = New-AzureRmVirtualNetwork `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name $MYvNET `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig
$pip = New-AzureRmPublicIpAddress `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name "mypublicdns$(Get-Random)" `
-AllocationMethod Static `
-IdleTimeoutInMinutes 4
$nsgRuleHTTP = New-AzureRmNetworkSecurityRuleConfig `
-Name $myNetworkSecurityGroupRuleHTTP `
-Protocol Tcp `
-Direction Inbound `
-Priority 1000 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 80 `
-Access Allow
$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig `
-Name $myNetworkSecurityGroupRuleRDP `
-Protocol Tcp `
-Direction Inbound `
-Priority 1100 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 3389 `
-Access Allow
$nsgRulePS = New-AzureRmNetworkSecurityRuleConfig `
-Name $myNetworkSecurityGroupRulePS `
-Protocol Tcp `
-Direction Inbound `
-Priority 1200 -SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 5986 `
-Access Allow
$nsg = New-AzureRmNetworkSecurityGroup `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name $myNetworkSecurityGroup `
-SecurityRules $nsgRuleHTTP,$nsgRuleRDP
$nic = New-AzureRmNetworkInterface `
-Name $myNic `
-ResourceGroupName
$resourceGroup
-Location $location `
-SubnetId $vnet.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $nsg.Id
$VMLocalAdminUser = "LocalAdminUser"
$VMLocalAdminSecurePassword = ConvertTo-SecureString "password1!" `
-AsPlainText
-Force
$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword);
$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize Standard_DS1_v2 | `
Set-AzureRmVMOperatingSystem -Windows -ComputerName $vmName -Credential $Credential | `
Set-AzureRmVMSourceImage -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version latest | `
Add-AzureRmVMNetworkInterface -Id $nic.Id
New-AzureRmVM `
-ResourceGroupName $resourceGroup `
-Location $location `
-VM $vmConfig
Get-AzureRmPublicIpAddress `
-ResourceGroupName $resourceGroup | Select IpAddress
$PublicSettings = '{"commandToExecute":"powershell Add-WindowsFeature Web-Server"}'
Set-Item WSMan:\localhost\Client\TrustedHosts `
-Value * #$pip.ToString()
Enable-PSRemoting –Force
$serviceCreds = New-Object `
-TypeName System.Management.Automation.PSCredential `
-ArgumentList $VMLocalAdminUser, $VMLocalAdminSecurePassword
$setupSession = New-PSSession `
-ComputerName $pip `
-Port 5986 `
-Credential $serviceCreds `
-UseSSL
Remove-PSSession $setupSession
Я проверяю в своей лаборатории, в вашем сценарии есть некоторые ошибки в вашем сценарии. Вы не добавляете $nsgRulePS
правила вашей NSG. Вам нужно изменить свой сценарий, как показано ниже:
$nsg = New-AzureRmNetworkSecurityGroup `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name $myNetworkSecurityGroup `
-SecurityRules $nsgRuleHTTP,$nsgRuleRDP,$nsgRulePS
Я изменяю ваш скрипт, как показано ниже, у меня он работает.
# Variables for common values
$resourceGroup = "rgTest"
$location = "East US"
$vmName = "vmTest"
$SubscriptionName = "subscription test"
##storage account name is wrong New-AzureRmStorageAccount : sanTest is not a valid storage account name. Storage account name must be between 3 and 24 characters in length and use numbers and lower-case letters only.
#$StorageAccountName = "sanTest"
$StorageAccountName = "shuitest12"
$NetworkSecurityGroupName = "nsgTest"
$myNic = 'nicTest'
$MYvNET = 'vnetTest'
$myNetworkSecurityGroupRuleHTTP = 'nsgruleHTTPTest'
$myNetworkSecurityGroupRuleRDP = 'nsgruleRDPTest'
$myNetworkSecurityGroupRuleWWW = 'nsgruleWWWTest'
$myNetworkSecurityGroupRulePS = 'nsgrulePSTest'
$myNetworkSecurityGroup = 'nsgTest'
$rcgTest = 'rcgTest'
$secpasswd = ConvertTo-SecureString "password1" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential("test@user.org", $secpasswd)
Add-AzureRmAccount -Credential $cred
Login-AzureRmAccount -Credential $cred
Select-AzureRmSubscription -SubscriptionName $SubscriptionName
Get-AzureRmResourceGroup -Name $resourceGroup -ev notPresent -ea 0
if ($notPresent)
{
New-AzureRmResourceGroup -Name $resourceGroup -Location $location
}
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24
New-AzureRmStorageAccount `
-Location $Location `
-ResourceGroupName $ResourceGroup `
–StorageAccountName $StorageAccountName `
-SkuName Standard_GRS
$vnet = New-AzureRmVirtualNetwork `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name $MYvNET `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig
$pip = New-AzureRmPublicIpAddress -ResourceGroupName $resourceGroup `
-Location $location `
-Name "mypublicdns$(Get-Random)" `
-AllocationMethod Static `
-IdleTimeoutInMinutes 4
$nsgRuleHTTP = New-AzureRmNetworkSecurityRuleConfig `
-Name $myNetworkSecurityGroupRuleHTTP `
-Protocol Tcp `
-Direction Inbound `
-Priority 1000 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 80 `
-Access Allow
$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig `
-Name $myNetworkSecurityGroupRuleRDP `
-Protocol Tcp `
-Direction Inbound `
-Priority 1100 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 3389 `
-Access Allow
$nsgRulePS = New-AzureRmNetworkSecurityRuleConfig `
-Name $myNetworkSecurityGroupRulePS `
-Protocol Tcp `
-Direction Inbound `
-Priority 1200 -SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 5986 `
-Access Allow
$nsg = New-AzureRmNetworkSecurityGroup `
-ResourceGroupName $resourceGroup `
-Location $location `
-Name $myNetworkSecurityGroup `
-SecurityRules $nsgRuleHTTP,$nsgRuleRDP,$nsgRulePS
$nic = New-AzureRmNetworkInterface `
-Name $myNic `
-ResourceGroupName $resourceGroup `
-Location $location `
-SubnetId $vnet.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $nsg.Id
##use name could not admin
$VMLocalAdminUser = "<your user name>"
$VMLocalAdminSecurePassword = ConvertTo-SecureString "<your password>" `
-AsPlainText `
-Force
$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword);
$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize Standard_DS1_v2 | Set-AzureRmVMOperatingSystem -Windows -ComputerName $vmName -Credential $Credential | `
Set-AzureRmVMSourceImage -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version latest | `
Add-AzureRmVMNetworkInterface -Id $nic.Id
New-AzureRmVM `
-ResourceGroupName $resourceGroup `
-Location $location `
-VM $vmConfig
Get-AzureRmPublicIpAddress `
-ResourceGroupName $resourceGroup | Select IpAddress
Однако, когда виртуальная машина создана успешно, вы не можете winrm
сервер напрямую. Вам необходимо проделать следующие шаги:
1. Откройте порт 5986 на вашей виртуальной машине Windows, вам нужен RDP для вашей виртуальной машины и установите его. Azure PowerShell не смог этого сделать.
2. Настройте winrm для прослушивания 5986, по умолчанию он прослушивает 5985. Вам также необходимо добавить сертификат на вашу виртуальную машину. Пожалуйста, обратитесь к этому ссылка на сайт.
Обновить:
Если вы хотите использовать WinRM-HTTP, а не HTTP, вам не нужно настраивать сертификат на виртуальной машине, вам нужен только открытый порт 5985 в брандмауэре Windows.
Примечания: вы должны открыть порт 5985 в Azure NSG.
Вы могли бы сделать это с Расширение пользовательского сценария, он выполняется при создании виртуальной машины. Просто ваш скрипт в виде файла ps.
New-NetFirewallRule -DisplayName "WinRM-HTTP- Allow Port 5985" -Direction Inbound -LocalPort 5985 -Protocol TCP -Action Allow
Вы можете загрузить сценарий в учетную запись хранения Azure или на github.
Подробнее об этом см. Здесь ссылка на сайт.
Насколько я понимаю, вы ни в коем случае не связываете свои NSG со своей подсетью. Вам нужно запустить что-то вроде этого
$vnet = Get-AzureRmVirtualNetwork -ResourceGroupName TestRG -Name TestVNet
Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name FrontEnd `
-AddressPrefix 192.168.1.0/24 -NetworkSecurityGroup $nsg
Также, если вы захотите взглянуть на шаблоны ARM, они делают это намного проще.