我在 powershell 中编写了一个备份脚本。我使用 Unblock-File 对其进行了授权,因此无需交互即可运行。
我使用 gpedit 将其添加到要在关机时运行的 powershell 脚本中。
虽然该脚本在直接执行时运行良好,但在关机时却无法运行。
我按照第二个答案中所述禁用了快速启动和休眠功能这个问题但什么都没有改变。
我如何才能知道
- 我的脚本是否失败
- 或者根本没有调用脚本
- 关机时会发生什么事
附录:更多信息
- 该脚本打开与 NAS 的网络连接并定义网络驱动器
- 然后它将本地数据复制到该网络驱动器上新创建的文件夹中,使用日期和时间作为文件夹名称
- 复制过程完成后,网络驱动器断开连接。
- 我认为“关机时”可以很好地类比“完成一些工作”。我认为,当你故意关闭电脑时,很可能已经取得了一些进展。
- 我不知道在关机时执行此操作是否是最佳选择,但据我所知这是最佳选择。也许可以在每次文件更改时自动执行此操作?
- 我使用 gpedit.msc 安装脚本,然后转到 Computerkonfiguration->Windows-Settings->Scripts->Shutdown。在那里,我在专用的“PowerShell-Scripts”选项卡中添加了脚本。我更改了顺序设置,以便首先执行 PowerShell 脚本。
- 该脚本有一个本地路径,C:\Backupsoftware\Smart_Backup_Create_folders_by_Date_MK.ps1
- 要复制的数据位于桌面和某个用户帐户的文件夹中。
更多细节 我按照 flolilolilo 的建议,在脚本开头添加了一行,基本上就是执行一些 printf-debug(或者是 Write-Output-Debug?)。我找到文本输出文件的地方是
C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown
因此,脚本显然被调用了,但除了输出调试信息之外什么也不做。我可以将错误和警告重定向到文本文件中吗?
啊,我该如何安装 NAS?
New-PSDrive -Name "backup" -PSProvider Filesystem -Root "\\169.254.100.100\share"
第三附录
这是当前代码。
#+-------------------------------------------------------------------+
#| = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = |
#|{>/-------------------------------------------------------------\<}|
#|: | Authors: Aman Dhally; ariser | :|
#| :| Email: [email protected]
#|: | Purpose: Smart Backup and create folder by Date
#| :|
#|: | Date: 29 November 2011 - 2017
#|: |
#| :| /^(o.o)^\ Version: n.a. |: |
#|{>\-------------------------------------------------------------/<}|
#| = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = |
#+-------------------------------------------------------------------+
#System Variable for backup Procedure
# $date = Get-Date -Format d.MMMM.yyyy
$date = Get-Date -Format yyyy.MM.dd.HH.mm.ss
Write-Output "This script was called at %(Get-Date)" | Out-File .\test.txt
New-PSDrive -Name "backup" -PSProvider Filesystem -Root "\\169.254.100.100\Krautlight_aktiv"
# $source = "D:\Tally\Data\"
$destination = "backup:\$date"
# $path = test-Path $destination
$homeprefix= "C:\Users\MyUser\"
$directories = @{ }
$directories.add($homeprefix+"Documents\eagle", "EDA\eagle")
$directories.add($homeprefix+"Documents\KL\Eaglelibraries", "EDA\eigeneLibraries")
$directories.add($homeprefix+"Desktop\Flansch", "CAD\Flansch")
$directories.add($homeprefix+"Desktop\BoCubeDateien", "CAD\Bopla")
try{
mkdir $destination
; write-outpot "mkdir passsed" | out-file .\test.txt -append;
}
catch
{ write-output "mkdir failed" | out-file .\test.txt -append }
ForEach($source in $directories.KEYS.GetEnumerator())
{
cd backup:\
$destpath=$destination+'\'+$directories.Get_Item($source)
Copy-Item -Path $source -Destination $destpath -Recurse
cd c:\
}
Remove-PSDrive "Backup"
我目前的调查显示,调试消息可以正常输出到 test.txt 文件。但 mkdir 失败。