windows Powershell在运行.ps1文件时自动关闭

jexiocij  于 2023-03-04  发布在  Windows
关注(0)|答案(2)|浏览(527)

当我尝试创建这个.ps1文件:* * 查看完整的.ps1标记**

# Definieer het pad waar de bestanden worden gekopieerd
$sourcePath = "C:\Users\Mr.Fox\AppData\Local\Hogwarts Legacy\Saved"

# Definieer het pad waar de bestanden naartoe worden gekopieerd
$destinationPath = "D:\Games\Saved HL"

# Zoek naar de laatst gebruikte mapnummer
$latestFolder = Get-ChildItem $destinationPath | Where-Object { $_.PSIsContainer } | Sort-Object { [int]($_.Name -replace '^\D+') } -Descending | Select-Object -First 1
if ($latestFolder -eq $null) {
    $folderNumber = 1
} else {
    $folderNumber = [int]($latestFolder.Name -replace '^\D+') + 1
}

# Maak de nieuwe doelmap aan
$newFolderName = "Backup_$("{0:D2}" -f $folderNumber)"
$newFolderPath = Join-Path $destinationPath $newFolderName
if (-not (Test-Path $newFolderPath)) {
    New-Item -ItemType Directory -Path $newFolderPath | Out-Null
}

# Voeg uitvoer toe aan het logbestand
$logFile = Join-Path $destinationPath "backuplog.txt"
$date = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logEntry = "$date - Backup gemaakt naar map $newFolderPath"
Add-Content $logFile $logEntry

# Vraag de gebruiker om bevestiging voordat het script wordt uitgevoerd
$confirm = Read-Host "Weet je zeker dat je het script wilt uitvoeren? Typ 'ja' om door te gaan."
Write-Host "Bevestiging: $confirm"

if ($confirm -eq "ja") {
    # Kopieer de bestanden van de bron naar de nieuwe doelmap
    Copy-Item $sourcePath $newFolderPath -Recurse -Force

    Write-Host "Het backupproces is voltooid en de uitvoer is toegevoegd aan het logbestand."
} else {
    Write-Host "Script uitvoering geannuleerd."
}

# Zet de PowerShell uitvoeringsbeleid terug naar de oorspronkelijke instelling
if ((Get-ExecutionPolicy -Scope CurrentUser) -eq "RemoteSigned") {
    Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Restricted
}

Read-Host "Druk op een toets om door te gaan..."

然后我尝试单击"使用PowerShell运行",但它关闭了,Get-ExecutionPolicy -List告诉我当前用户的策略是Restricted,但当我尝试启用它时,它却返回到Restricted,我不知道为什么。您能帮我解决这个问题吗?

PS C:\WINDOWS\system32> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser      Restricted
 LocalMachine    RemoteSigned

我试着在网上搜索解决方案,但没有得到很;我试过了:https://stackoverflow.com/a/27755459/19673867
还是同样的问题,我期待它能解决我的问题。
2023年2月27日8时24分:得到回复吗
我得到了这样的回应
PS C:\WINDOWS\system32〉设置执行策略不受限制
执行策略更改执行策略有助于保护您免受不信任的脚本的攻击。更改执行策略可能会使您面临https:/www.example.com上about_Execution_Policies帮助主题中描述的安全风险。是否要更改执行策略?[Y]是[A]全部是[N]否[L]全部否[S]挂起[?]帮助(默认为"N"):go.microsoft.com/fwlink/?LinkID=135170Windows PowerShell已成功更新你的执行策略,但该设置被在更具体的作用域中定义的策略覆盖。由于该覆盖,你的 shell 程序将保留其当前有效的执行策略"受限"。键入"Get-ExecutionPolicy-List"以查看你的执行策略设置。有关详细信息,请参阅"Get-Help Set-ExecutionPolicy"。行:1字符:1 y Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of Restricted. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information ple ase see "Get-Help Set-ExecutionPolicy". At line:1 char:1

  • 设置执行策略不受限制
+ CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
  + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

PS C:\窗口\系统32〉
我在14:57查过了
在regedit标准中没有值,但"ExecutionPolicy"已设置为"不受限制",但我仍然无法运行脚本

pftdvrlh

pftdvrlh1#

    • TL;医生**
  • 从脚本中 * 删除 * 以下内容,因为它会显式地将当前用户的执行策略恢复为Restricted,从而防止将来执行脚本:
if ((Get-ExecutionPolicy -Scope CurrentUser) -eq "RemoteSigned") {
    Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Restricted
}
  • 请注意,如果使用 * process * scoped执行策略调用脚本-即通过CLI的-ExecutionPolicy参数(例如powershell.exe -ExecutionPolicy Bypass ...),它相当于-Scope Process-则根据定义,此类策略仅适用于 * 该进程 *,因此您不必担心恢复任何 * persistently * 定义的策略。
  • 然后打开一个PowerShell窗口并执行以下命令,根据Get-ExecutionPolicy -List输出显示的内容,这会将您的用户帐户的有效执行策略更改为RemoteSigned,这将允许执行脚本,但从Web下载的脚本除外:
Set-ExecutionPolicy -Scope CurrentUser Undefined -Force

请继续阅读以获得解释和替代方案。

    • 背景信息**:

PowerShell的execution policies可以在 * 多个作用域 * 中定义,但在给定会话中只有 * 一个 * 作用域的策略是 * 有效的 * 策略。

  • Get-ExecutionPolicy * 不带参数 * 列出了 * 有效 * 策略。
  • Get-ExecutionPolicy -List列出了为 * 所有 * 作用域定义的策略,按 * 优先级降序 * 排列:
  • 也就是说,具有Undefined以外的值的 * first * 作用域也是有效作用域。
  • 如果在任何范围内都没有设置执行策略,则应用内置的默认值:Restricted(意味着 * 不允许 * 执行脚本)(在 * 桌面 * 版Windows中)和RemoteSigned(在 * 服务器 * 版Windows中)。

您的Get-ExecutionPolicy -List显示RestrictedCurrentUser作用域(特定于当前用户)中定义,RemoteSignedAllUsers作用域中定义。
因此,Restricted对您来说是"有效"的策略,可以防止脚本执行。
根据您的需要,您有三个选项:

  • 如果AllUsers-scope策略RemoteSigned适用(它允许执行源自本地文件系统或网络共享的脚本,但阻止通过Web浏览器、电子邮件客户端或Messenger应用程序下载的脚本):
  • 只需 * 取消定义 * CurrentUser策略,AllUsers策略即可生效:
Set-ExecutionPolicy -Scope CurrentUser Undefined -Force
  • 如果要保留当前用户策略,但将其更改为允许脚本执行,请运行类似下面的命令,并指定所需的策略(本例中为RemoteSigned):
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force

如果您还想更改AllUsers-scope策略,则需要从 * elevated * 会话(以管理员身份运行)执行此操作。

li9yvcax

li9yvcax2#

将LocalMachine作用域的执行策略设置为Unrestricted。此作用域比当前用户更重要。

Set-ExecutionPolicy Unrestricted 
# by default its set to LocalMachine scope

相关问题