Я запускаю удаленный сценарий Powershell, чтобы добавить машину в домен. Машина перезагружается, добавляется в домен, все хорошо.
$Uri = Get-AzureWinRMUri -ServiceName $ServiceName -Name $VMName -Verbose
$PSSession = New-PSSession -ConnectionUri $Uri -Credential $Credential -Verbose
$PSDomainSession = New-PSSession -ConnectionUri $Uri -Credential $DomainCredential -Verbose
Invoke-Command -Session $PSSession -ScriptBlock { Add-Computer -DomainName $Using:DomainName -Credential $Using:DomainCredential -Restart -Passthru -Verbose }
При попытке использовать ранее определенный сеанс учетных данных домена после того, как компьютер вернется в режим онлайн:
Invoke-Command -Session $PSDomainSession -ScriptBlock { ps }
появляется эта ошибка:
Cannot invoke pipeline because runspace is not in the Opened state. Current state of runspace is 'Broken'.
+ CategoryInfo : OperationStopped: (Microsoft.Power...tHelperRunspace:ExecutionCmdletHelperRunspace) [],
InvalidRunspaceStateException
+ FullyQualifiedErrorId : InvalidSessionState,myvm.cloudapp.net
Как сбросить или удалить существующие "сломанные" сеансы только для этой машины? Они перечислены с Get-PSSsesion.
Просто подождите, пока машина вернется в сеть, а затем, наконец, выполните очистку с помощью Remove-PSSession
:
$Uri = Get-AzureWinRMUri -ServiceName $ServiceName -Name $VMName -Verbose
$PSSession = New-PSSession -ConnectionUri $Uri -Credential $Credential -Verbose
$PSDomainSessionCreate = { New-PSSession -ConnectionUri $Uri -Credential $DomainCredential -Verbose }
Invoke-Command -Session $PSSession -ScriptBlock { Add-Computer -DomainName $Using:DomainName -Credential $Using:DomainCredential -Restart -Passthru -Verbose }
# Wait for machine to restart
$PSDomainSession = &$PSDomainSessionCreate
# Use $PSDomainSession to configure the machine
# Then cleanup using the Remove-PSSession cmdlet as suggested by @Andy
Remove-PSSession -Session $PSSession,$PSDomainSession