我有这个配置脚本,它将文件从服务器复制到客户端。此示例包含一个 Access Runtime 应用程序,需要在客户端本地安装。
如果目标文件夹不存在,则会先创建该文件夹,然后将该文件粘贴到该文件夹中。
# Install myFolder
$install_Folder = {
echo 'Creating folder...'
New-Item -Path "C:\Program Files\" -Name "myProgram" -type directory
icacls 'C:\Program Files\pzCAFM' /grant:r 'User:(OI)(CI)F'
echo 'Done.'
}
# Install myFile
$install_File = {
echo 'Copying the file to destination...'
Copy-Item "\\myserver\myshare\Database.accdr" -Destination "C:\Program Files\myprogram\"
echo 'Done.'
}
# Check if the folder exists and go to install otherwise start deployment
if (Test-Path -Path 'C:\Program Files\myProgram')
{
echo 'Folder exists. Stopping any open process...'
if (Get-Process -Name 'MSACCESS'){
Stop-Process -Name 'MSACCESS'
Start-Sleep -Seconds 2
Remove-Item -Path 'C:\Program Files\myProgram\Database.laccdr' -Force
Start-Sleep -Seconds 2
}
echo 'Folder exists. Proceed with updating the file'
.$install_File
}
else {
echo 'Folder not found. Proceed with initial deployment.'
.$install_myFolder
Start-Sleep -Seconds 5
.$install_File
echo 'Installation complete'
}
您已定义脚本块并将其存储在变量中,但从未真正使用 '运行' 它们
Invoke-Command -ScriptBlock $install_myXX
。请参阅about_Script_Blocks
为什么不让这些功能像
接下来,在您的
else
块中,只需调用该函数,Install-MyFolder
而不是$install_myFolder
像现在这样编写。再给你一个提示:由于 Powershell 的读取和执行方式是自上而下,因此你应该在调用脚本块和/或函数之前先定义它们。将它们放在代码的最后,这样只有在第二次运行时才会被识别。