【问题标题】:Powershell script only work If executes in a Powershell Window [duplicate]Powershell脚本仅在Powershell窗口中执行时才有效[重复]
【发布时间】:2020-03-03 08:17:39
【问题描述】:

我有这个 Powershell 脚本:

Get-ChildItem –Path "D:\Downloads" -Recurse | 
Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))} | Remove-Item -Recurse -Force -Confirm:$false

如果我将它粘贴到 Powershell 窗口上,它可以工作,但是如果我尝试使用脚本执行 .ps1 文件,则会打开一个空白的 Powershell 窗口 1 秒(因为我使 .ps1 文件由 Windows Powershell 打开) 然后它关闭,但脚本不起作用。仅当我手动打开 Powershell 窗口并将其粘贴脚本时才有效。该文件具有所有用户的权限...

更新:

如果我作为 bat 文件运行,它会显示代码错误。

【问题讨论】:

  • 对我来说,您的脚本工作正常并删除文件。检查您的执行策略可能是它的问题,并再次检查文件夹的权限。
  • 我检查了,将 D:/Downloads 文件夹和文件本身的所有用户完全控制,但仍然无法正常工作。我试图将文件移动到另一个位置并执行它。我有另一个 .ps1 文件可以清理回收站,它可以打开文件并具有相同的权限,但是这个脚本不能通过这种方式工作......
  • 我确定你已经检查过了,但还是要问。是否有超过 30 天的文件?
  • “脚本不起作用” - 它做了什么告诉你它不起作用?有错误信息吗?您可以在脚本末尾添加“start-sleep -seconds 30”,让您有机会在屏幕关闭之前阅读屏幕。
  • 我使用了“start-sleep -seconds 30”,它仍然会立即关闭。 @Vlad,是的,有一个超过 30 天的文件。我一直在尝试同一个文件,如果我从 powershell 窗口手动使用脚本,脚本会工作并删除它,如果我直接运行文件,它不会删除它。

标签: powershell


【解决方案1】:

已解决,是代码上的一个破折号,与其他代码不同:

-

它必须是:

-

谢谢。

【讨论】:

  • 这就是所谓的“破折号”(请参阅​​en.wikipedia.org/wiki/Dash#Em_dash) - 当您从富文本编辑器(例如 Microsoft Word、电子邮件客户端或有时是网页)复制代码 sn-ps 时,它通常会出现) - 它们通常会在您键入时自动将正常的连字符/减号替换为 Em Dash,因为它在屏幕/打印页面上看起来更好,但这会破坏需要常规连字符的脚本。
  • @mclayton,好点,但请注意 PowerShell 确实 允许使用 (破折号)代替 ASCII 范围 -(连字符减号) - 见this answer。虽然使用常规的- 绝对是可取的,因为更喜欢使用 ASCII 范围的引号而不是它们的印刷对应物,这里唯一真正的问题是 字符编码 之一 - 请参阅链接的副本。
猜你喜欢
  • 2019-12-12
  • 2013-03-22
  • 2012-04-08
  • 2019-04-18
  • 1970-01-01
  • 2019-01-23
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多