2017-08-27 8 views
1

私はPowerShellとスクリプティングを初めて使い、奇妙な状況に陥っています。リモートVM上のサービスを削除しようとしたときの例外

実行中のサービスを削除し、新しいサービスをインストールするスクリプトを作成しようとしています(ファイルやその他もコピーしています)。

問題は、スクリプトとは別にコマンドを実行したときにサービスを削除するコマンドです。このコマンドは機能します。 私は、スクリプトの一部として、私のコマンドを実行すると、私は例外を取得:

:例外は「0」引数(複数可)で「削除」を呼び出す:「リモート プロシージャコールに失敗し、実行されませんでした( HRESULTからの例外: 0x800706BF)」

これは私が個別に実行された:

Connect-VIServer -Server "IP" -Protocol https -User "User" -Password "Password" 


$password = "Password" | ConvertTo-SecureString -asPlainText -Force 
$username = "User" 
$credential = New-Object System.Management.Automation.PSCredential($username,$password) 


(gwmi win32_service -ComputerName "IP" -Credential $credential -filter "name='Service Name'").delete() 

スクリプト、それが失敗したときに、私が実行します。

Connect-VIServer -Server IP -Protocol https -User "User" -Password "Password" 

$Template = Get-Template -Name "Template Name" 

Set-Template $Template -ToVM 

$VM = Get-VM -Name "Template Name" 

Start-VM $VM 

Start-Sleep -s 100 


#Creating PScredentials 
$password = "Password" | ConvertTo-SecureString -asPlainText -Force 
$username = "User" 
$credential = New-Object System.Management.Automation.PSCredential($username,$password) 

#Creating a New folder on vm 
$Create_New_Folder = 
{ 
New-Item -Path "Host Path" -ItemType directory 
} 
Invoke-Command -ComputerName "PC IP" -Credential $credential -ScriptBlock $Create_New_Folder 

#Copy File From Localhost To vm 
Get-Item "Host Folder" | Copy-VMGuestFile -Destination "VM LOcal Path" -VM "Template Name" -LocalToGuest -GuestUser "User" -GuestPassword "Password" -Force -Verbose 


#Deleting a service on remote vm 
(gwmi win32_service -ComputerName "IP" -Credential $credential -filter "name='Service Name'").delete() 

#Retart VM so the service will be removed 
Restart-VM "Template Name" -Confirm:$false 
+0

ComputerName "PC IP"とComputerName "IP"に違いはありますか? – Nikolaus

+0

これは、ここにアップロードするために変更した名前です...スクリプト内では同じipです。 – Udi

+0

あなたは新しいフォルダを作成するようなスクリプトブロックに入れようとしましたか? – Nikolaus

答えて

0

gwmiがリモート処理を実行する方法がわかりません。 DCOMなどを使用している場合は、追加のアクセス許可が必要な場合があります。 Invoke-Commandを使用してサービスを削除しようとすることができます(既に新しいフォルダを作成するために使用しています)。例:

Invoke-Command -ComputerName "PC IP" -Credential $credential -ScriptBlock { 
     (gwmi win32_service -filter "name='Service Name'").delete() 
    } 

Invoke-Commandを使用することにより、より多くの「標準化」リモーティングメカニズムを使用しています。

希望に役立ちます。

+0

はい、Nikolausとあなたが提案したとおりです。ありがとうございます:) – Udi

関連する問題