【问题标题】:PowerShell Script only works from PowerShell Console and not from ISEPowerShell 脚本仅适用于 PowerShell 控制台,不适用于 ISE
【发布时间】:2017-11-07 20:14:26
【问题描述】:

我对 PowerShell 非常陌生。我正在尝试通过 PowerShell 删除文件夹中的一组测试结果文件。当我通过 PowerShell 控制台运行代码时,它可以工作。相同的代码不适用于 ISE。 下面是代码:

Set-Location -Path "Path";

$testResultsFolder = Get-ChildItem -Include *TestResults -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName;
$date = Get-Date;
$limit = 30;


foreach($testResult in $testResultsFolder)
{
    $resultsPath = Get-Item $testResult.FullName;
    Get-ChildItem -Path $resultsPath -Recurse -Force |  Where-Object { -not $_.PSIsContainer -and $date.Subtract($_.LastWriteTime).Days -gt $limit } | Remove-Item -Force;
}

这在 PowerShell 控制台中运行良好,但在 ISE 中运行良好。 ISE 不显示任何错误。它显示“已完成”。有人可以说明我做错了什么吗?

【问题讨论】:

  • 1.关闭并重新打开 ISE。 2. 将代码放入.ps1 脚本文件中。 3. 通过在 ISE 的 PowerShell 提示符下键入其名称并按 Enter 在 ISE 中运行脚本文件。您会注意到它的运行方式相同。
  • 如果您没有将其作为脚本运行,您的变量会污染您在 ISE 中的会话。
  • @Bill_Stewart 我尝试了你的建议,它运行良好,但没有文件被删除。但是当我在控制台中使用相同的代码运行时,它会正确删除文件。
  • @TheIncorrigible1 我将它作为脚本运行。当我从控制台运行相同的 ps1 文件时,它仍然不会删除文件。
  • @PraveenTata 您的标题与您现在所说的不符。

标签: powershell


【解决方案1】:

试试这个:

删除.ps1

#Requires -Version 3
$Path = 'C:\Temp'

$Cleanup = (Get-ChildItem -Path $Path -Include '*TestResults' -Recurse -Directory).FullName

ForEach ($Folder in $Cleanup)
{
    Get-ChildItem -Path $Folder -File -Recurse -Force |
        Where-Object { $PSItem.LastWriteTime -lt (Get-Date).AddDays(-30) } |
        Remove-Item -Force
}

使用Set-Location 可能会导致结果不一致,尤其是在您使用动态变量时。我建议使用可变目标,以便获得一致的结果。

【讨论】:

  • 感谢您的回复。我通过用我的替换 $Path 来尝试这个。它说“Get-ChildItem:找不到与参数名称'Directory'匹配的参数。”
  • @PraveenTata 这意味着你在PSv2。我把#requires放在那里是有原因的
  • 感谢和抱歉迟到的回复。我正在尝试一些事情。我会看看是否可以解决此问题,因为这是在我的办公室笔记本电脑上,无法自行更新。
  • 我搞定了。我认为这是最愚蠢的错误,但我对 PowerShell 很陌生,就像 3 天前一样 :) 我将目录复制到其他位置(不是 C:\ 驱动器)并运行我现有的脚本并且它有效。我认为通过 ISE 存在一些权限问题,而不是来自控制台。 @ TheIncorrigible1 非常感谢您的帮助。 @Bill_Stewart 也谢谢你。
猜你喜欢
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 2017-03-25
  • 2019-08-31
  • 2021-11-16
  • 2021-11-30
相关资源
最近更新 更多