【发布时间】:2020-06-02 16:23:57
【问题描述】:
我有一个奇怪的案例,我无法理解原因......
请知道我是 PowerShell 的新手。
我正在开发一个 PowerShell 菜单系统,以帮助在我的环境中自动构建新计算机。我有一个包含应用程序安装脚本的 PS1 文件。当我使用脚本来引用它时,我可以运行它并且没有问题。但是,当我尝试将其插入函数并引用它时不会。
这行得通:
4 # Microsoft Office 32-bit
{
Write-Host "`nMicrosoft Office 32-bit..." -ForegroundColor Yellow
# {installMS32Bit}
Invoke-Expression "cmd /c start powershell -NoExit -File '\\**SERVERPATH**\menuItems\ms_office\32-bit\install.ps1'"
Start-Sleep -seconds 2
}
这不是:
function installMS32Bit(){
Invoke-Expression "cmd /c start powershell -NoExit -File '\\**SERVERPATH**\menuItems\ms_office\32-bit\install.ps1'"
}
}
4 # Microsoft Office 32-bit
{
Write-Host "`nMicrosoft Office 32-bit..." -ForegroundColor Yellow
{installMS32Bit}
Start-Sleep -seconds 2}
install.ps1 文件:
# Copy MS Office uninstall and setup to local then run and install 32-bit Office
Copy-Item -Path '\\**SERVERPATH**\menuItems\ms_office\setup.exe' -Destination 'C:\temp\' -Force
Copy-Item -Path '\\**SERVERPATH**\menuItems\ms_office\uninstall.xml' -Destination 'C:\temp\' -Force
Copy-Item -Path '\\**SERVERPATH**\menuItems\ms_office\32-bit\Setup.exe' -Destination 'C:\temp' -Force
Invoke-Expression ("cmd /c 'C:\temp\setup.exe' /configure 'C:\temp\uninstall.xml'")
Start-Process -FilePath 'C:\temp\Setup.exe'
关于 Invoke-Expression 的第二个问题和一点解释...
我喜欢查看进度并喜欢打开辅助窗口来监控正在运行的新进程。在没有 Invoke-Expression 的情况下,我无法找到具有持久窗口的解决方案。
如果有更好的方法在 PowerShell 中执行此操作,我会全力以赴!
【问题讨论】:
-
{installMS32Bit}->installMS32Bit(否则你只是定义了一个新的脚本块而不执行它)
标签: powershell cmd batch-processing