使用Powershell安装给定文件夹中的所有文件



我正在创建一个Powershell的脚本作为一个爱好,但它可以是一个工具,用于安装所有文件从一个给定的文件夹后,从0安装。我很纠结,因为我不知道问题出在哪里。我是PSH的新手,但我怀疑这可能是数据问题:

Start-Process: Este comando no se puede ejecutar debido al error: ElSistema no puede encontrar archivo specificado.

En línea: 47 Carácter: 5

  • Start-Process -FilePath "$installArrayMsi" -ArgumentList '/silent ...
    
  • ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    • CategoryInfo: InvalidOperation: (:) [Start-Process], InvalidOperationException
    • fulllyqualifiederror: InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand

代码:

$nameExe=Get-ChildItem | Where-Object -property name -Like "*.exe" | Get-ChildItem -name 
$nameMsi=Get-ChildItem | Where-Object -property name -Like "*.msi" | Get-ChildItem -name
$Location=(Get-Location).path
$Location
$numProgramsExe=$nameExe | Measure-Object -Line | Select-Object -Expand Lines
$numProgramsMsi=$nameMsi | Measure-Object -Line | Select-Object -Expand Lines

$superArrayExe = @($nameExe)
$installArrayExe = @(for ($i = 0; $i -lt $numProgramsExe; $i++)
{ 
$Location+""+$superArrayExe[$i] 
}
)
for ($i = 0; $i -lt $numProgramsExe; $i++)
{ 
Start-Process -FilePath "$installArrayExe" -ArgumentList '/silent', '/install' -Wait
Write-Output "Instalando "$superArrayExe[$i]
Write-Output "   "
}
$superArrayMsi = @($nameMsi)
$installArrayMsi = @(for ($i = 0; $i -lt $numProgramsMsi; $i++)
{ 
$Location+""+$superArrayMsi[$i] 
}
)
for ($i = 0; $i -lt $numProgramsMsi; $i++)
{ 
Start-Process -FilePath "$installArrayMsi" -ArgumentList '/silent', '/install' -Wait
Write-Output "Instalando "$superArrayMsi[$i]
Write-Output "   "
}

我认为问题来自于.msi文件不是可执行文件,而是一种数据库。您必须使用可执行文件msiexec.exe来部署它。

Start-Process "msiexec.exe" -ArgumentList "Your MSI file"

你可以试试

$params = '/i', "$installArrayMsi",
'INSTALLDIR="$yourInstallDir"', 'ADSK_SETUP_EXE=1',
'/qb!'
$p = Start-Process 'msiexec.exe' -ArgumentList $params -NoNewWindow -Wait -PassThru
$p.ExitCode

这是最终运行良好的代码:

$nameMsi=@(Get-ChildItem | Where-Object -property name -Like "*.msi" | Get-ChildItem -name)
$numProgramsMsi=$nameMsi | Measure-Object -Line | Select-Object -Expand Lines
for ($i = 0; $i -lt $numProgramsMsi; $i++)
{ 
$params = '/i', $nameMsi[$i], '/qb!'
$params
$p = Start-Process 'msiexec.exe' -ArgumentList $params -NoNewWindow -Wait -PassThru
$p.ExitCode
Write-Output "Instalando "$superArrayMsi[$i]
Write-Output "   "
}

所以最后我找到了一个更好的解决方案。我希望这对初学者有帮助……并安装。exe !

$nameExe=@(Get-ChildItem | Where-Object {$_.Name -Like "*.exe"})
for ($i = 1; $i -lt $nameExe.Count; $i++)
{ 
Start-Process -FilePath $nameExe.Name[$i] -ArgumentList '/silent', '/install' -Wait
Write-Output "Instalando" $nameExe.Name[$i] "`n"
} 

最新更新