通过组策略执行PowerShell

时间:2019-02-18 08:58:02

标签: powershell windows-10 gpo

我有两个单独的PowerShell(.ps1)文件,当用户登录PC时,它们一个接一个地运行。它们是非常简单的任务。第一个将快捷方式从网络位置复制到所有用户的AppData文件夹。

Copy-Item -Path "\\Server\Share\*.lnk" -Destination "$env:APPDATA\Microsoft\Windows\Start Menu\Programs"

第二个.ps1文件从Windows 10中删除了一些过时的软件,我不会将所有代码都放在这里,因为它具有很强的重复性,但它基本上列出了一些应用程序并最终将其删除。

$AppList = @(
    "*Microsoft.3dbuilder*"
    "*AdobeSystemsIncorporated.AdobePhotoshopExpress*"
    "*Microsoft.WindowsAlarms*"
    "*Microsoft.Asphalt8Airborne*"
)
foreach ($App in $AppList) {
    Get-AppxPackage -Name $App | Remove-AppxPackage -ErrorAction SilentlyContinue
}

如果我将两个文件放入相同的登录策略中,则第一个脚本将运行,但是第二个脚本要等到用户注销并重新启动后才能运行(我希望它们都同时运行)

我尝试将它们都放在同一个文件中,然后用;分开,但这没有用,所以尝试了and,同样没有乐趣。我还尝试过创建一个主文件(两个.ps1文件位于同一位置),然后运行以下文件,同样如此,这是行不通的。

&"$PSScriptroot\Copy Devices and Printers Shortcut.ps1"    &"$PSScriptroot\BloatwareRemoval.ps1"

我也尝试过用;and分开上面的内容。

编辑我已经使用以下pd1文件解决了此问题: Get-ChildItem \\File\Location | ForEach-Object { & $_.FullName }

2 个答案:

答案 0 :(得分:0)

根据评论,您应该将此脚本另存为.ps1文件,并根据需要进行调用。它将一起执行这两个操作。我添加了错误处理,但是理想情况下,您应该将它们解析为文件,以便在发生任何故障时可以进行引用。

If( (Test-Path -Path "\\Server\Share\*.lnk") -and (Test-Path -Path "$env:APPDATA\Microsoft\Windows\Start Menu\Programs"))
{
Copy-Item -Path "\\Server\Share\*.lnk" -Destination "$env:APPDATA\Microsoft\Windows\Start Menu\Programs"
}
else
{
"Invalid path. Kindly validate. "
}

@("*Microsoft.3dbuilder*","*AdobeSystemsIncorporated.AdobePhotoshopExpress*","*Microsoft.WindowsAlarms*","*Microsoft.Asphalt8Airborne*")|% {
    try{
    Get-AppxPackage -Name $_ | Remove-AppxPackage -ErrorAction stop
    }
    catch
    {
    $_.Exception.Message
    }
}

希望有帮助。

答案 1 :(得分:0)

我已使用以下pd1文件解决了此问题: Get-ChildItem \\File\Location | ForEach-Object { & $_.FullName }