Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 删除正在安装软件的脚本末尾的文件夹_Powershell - Fatal编程技术网

Powershell 删除正在安装软件的脚本末尾的文件夹

Powershell 删除正在安装软件的脚本末尾的文件夹,powershell,Powershell,我有一个脚本,它正在将文件从服务器复制到c:\windows\temp\以安装Microsoft office。我正在试图弄清楚如何删除本地驱动器上的副本,我必须从服务器上复制该副本才能进行安装。我很好奇,在删除可能需要的文件之前,是否有办法确保安装完成 函数获取文件名{ [CmdletBinding()] Param( [String]$Filter=“|*.*”, [字符串]$InitialDirectory=“C:\”) [void][System.Reflection.Assembly]

我有一个脚本,它正在将文件从服务器复制到
c:\windows\temp\
以安装Microsoft office。我正在试图弄清楚如何删除本地驱动器上的副本,我必须从服务器上复制该副本才能进行安装。我很好奇,在删除可能需要的文件之前,是否有办法确保安装完成

函数获取文件名{
[CmdletBinding()]
Param(
[String]$Filter=“|*.*”,
[字符串]$InitialDirectory=“C:\”)
[void][System.Reflection.Assembly]::LoadWithPartialName(“System.windows.forms”)
$OpenFileDialog=新建对象System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory=$initialDirectory
$OpenFileDialog.filter=$filter
[void]$OpenFileDialog.ShowDialog()
$OpenFileDialog.filename
}
$file=Get FileName-InitialDirectory$env:USERPROFILE\Desktop-Filter“文本文件(*.txt)|*.txt |所有文件(*.*)|*.”
ForEach($item in(获取内容$file)){
$sitem=$item.Split(“|”)
$computer=$sitem[0].Trim()
$user=$sitem[1].Trim()
$filepath=测试路径-路径“\\$computer\c$\程序文件(x86)\Microsoft Office\”
If($filepath-eq$false){
获取服务remoteregistry-ComputerName$computer |启动服务
复制项目-路径“\\server\Install\Office2010”-目标“\\$computer\c$\windows\temp\”-容器-递归-强制
}否则{
“$computer”+“\u已经有了软件”+“$(获取日期)“\124; Out File-FilePath”\\server\Install\Office2010\RemoteInstallfile.txt”-追加
}
}
我想知道我是否可以在下面代码的某个地方插入这段代码,然后继续删除这个文件夹

$folderToDelete=“\\$computer\c$\windows\temp\”
$ErrorActionPreference='silentlycontinue'
[io.directory]::删除($folderToDelete,$true)
$fso=新对象-ComObject scripting.filesystemobject
$fso.DeleteFolder($folderToDelete,$true)
if(测试路径($folderToDelete)){
新建项目-ItemType目录-Path。\EmptyFolder
机器人复制。\EmptyFolder$folderToDelete/mir
删除项目。\EmptyFolder
删除项目$folderToDelete
}

但我不确定在删除之前安装是否完成?有没有人做过类似的事情并想分享一些指导?

因为您使用
([WMICLASS]“\\$computer\ROOT\CIMV2:Win32\u进程”)启动进程。创建($InstallString)
传递PID比使用
启动进程或调用命令要困难一些。就像Chris N说的,你想抓取PID并等待它关闭。但是,由于远程计算机不支持
.waitforexit()
,因此您可以使用以下两种方法之一

Via Invoke命令:(这可能不是一个选项,因为您最初没有使用它来运行setup命令)

while循环,检查流程是否已完成:

$processid = (Get-Process setup -computername $computer).id
while ($null -ne $processid) {
    Start-Sleep -m 250
}
此外,删除部分似乎不必要地复杂

$folderToDelete = "\\$computer\c$\example"
if (Test-Path ($folderToDelete)) {
    Remove-Item $folderToDelete -Recurse -Force
}

还有一件事,将ErrorActionPreference设置为在脚本中静默继续通常是不好的做法。通常,答案是使用Try/Catch捕捉错误,因为您使用
([WMICLASS]”“\\$computer\ROOT\CIMV2:Win32\u进程”)启动进程。创建($InstallString)
传递PID比使用
启动进程或调用命令
要困难一些。就像Chris N说的,你想抓取PID并等待它关闭。但是,由于远程计算机不支持
.waitforexit()
,因此您可以使用以下两种方法之一

Via Invoke命令:(这可能不是一个选项,因为您最初没有使用它来运行setup命令)

while循环,检查流程是否已完成:

$processid = (Get-Process setup -computername $computer).id
while ($null -ne $processid) {
    Start-Sleep -m 250
}
此外,删除部分似乎不必要地复杂

$folderToDelete = "\\$computer\c$\example"
if (Test-Path ($folderToDelete)) {
    Remove-Item $folderToDelete -Recurse -Force
}

还有一件事,将ErrorActionPreference设置为在脚本中静默继续通常是不好的做法。通常,答案是使用Try/Catch捕捉正确的错误

您可以从用于启动安装程序的WMI方法中获取PID,而不是从用于启动安装程序的Get process-id$thatpid,Wait获取PID。您可以从用于启动安装程序的WMI方法中获取PID,而不是从Get process-id$thatpid,Wait获取PID,我还可以问您一些问题。我的脚本工作不正常,只是吐出了一些奇怪的信息。我很好奇你是否能告诉我这意味着什么,因为它没有安装microsoft office__属:2 _类:_参数_超类:_王朝:_参数__相关路径:_属性_计数:2 _派生:{}服务器:__命名空间:_路径:ProcessId:ReturnValue:8 PSComputerName:不幸的是,这意味着未知错误。它来自用于启动安装程序的Win32_进程类的Create方法。在您的脚本上下文中,它意味着“由于未知原因无法启动setup.exe”hmmm可能我不能使用变量?也许它需要.Create()中的路径?你能告诉我如何将删除部分插入脚本吗?我一直在做的一切都完全破坏了脚本。我能问你一些问题吗。我的脚本工作不正常,只是吐出了一些奇怪的信息。我很好奇你是否能告诉我这意味着什么,因为它没有安装microsoft office__属:2 _类:_参数_超类:_王朝:_参数__相关路径:_属性_计数:2 _派生:{}服务器:__命名空间:_路径:ProcessId:ReturnValue:8 PSComputerName:不幸的是,这意味着未知错误。它来自用于启动安装程序的Win32_进程类的Create方法。在您的脚本上下文中,它意味着“由于未知原因无法启动setup.exe”hmmm可能我不能使用变量?也许它需要.Create()中的路径?你能告诉我如何插入删除吗