2017-08-27 81 views
1

我是PowerShell和脚本编程的新手,遇到了一个奇怪的情况。尝试删除远程虚拟服务时发生异常

我想创建一个脚本,将删除正在运行的服务并安装新的服务(也复制文件等)。

问题是当我运行命令与命令工作的脚本分开运行时,删除服务的命令。 当我运行我的命令作为脚本的一部分,我得到一个异常:

:异常调用“删除”和“0”的说法(S):“远程 过程调用失败,没有执行(从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

是的,正如尼古拉斯和你所建议的一样。它的作品谢谢:) – Udi

相关问题