用于删除或存档旧日志文件的 PowerShell 脚本在本地运行良好,但在远程位置无法运行

Posted

技术标签:

【中文标题】用于删除或存档旧日志文件的 PowerShell 脚本在本地运行良好,但在远程位置无法运行【英文标题】:PowerShell script to delete or archive older log files works fine locally but it didn't work on remote location 【发布时间】:2021-08-23 07:52:27 【问题描述】:

我遇到了无法解决的问题。我正在尝试创建一个脚本来删除或存档旧的日志文件。但是,当我在本地运行脚本时,它运行良好,但无法在远程服务器上运行。我是新手,所以我无法弄清楚出了什么问题。我只需复制我的脚本并将其本地存储在远程服务器上,然后尝试从那里运行。调试脚本后,我发现“Get-Childitem”cmd 存在问题,因为它无法从给定位置找到任何文件。

$Dir = Get-Childitem $path - 递归

上面的代码没有在远程服务器的“Dir”中存储任何东西,但它在本地运行良好。谁能帮我看看这里出了什么问题。

【问题讨论】:

什么是$Path?这可能是因为您无法从远程服务器访问$Path。您可以浏览(使用例如资源管理器)到远程服务器上的路径内容吗? 是的,我们可以浏览到该路径并确认该路径中也有一些日志文件。我也认为这与访问有关,但无法确定确切原因。 请将$Path的内容添加到问题中。 【参考方案1】:

要远程执行命令,请使用以下结构:

Invoke-Command -ComputerName RemotePC -ScriptBlock Get-ChildItem $path -Recurse

好吧,或者更详细地描述问题。

【讨论】:

我想我的问题不清楚。就像您在本地环境中开发了一个 ps 脚本,并且一切正常。但是,当您复制相同的脚本并将其存储到 Remote Pc 中时,Get-Childitem 不会从给定路径返回任何文件。 当您可以立即在远程机器上执行命令时,为什么要将文件复制到另一个环境?还是您有严格的网络安全政策? 实际上,由于安全策略,我无权访问远程服务器。这就是为什么其他人执行脚本并发现它不起作用的原因。主要问题是 Get ChildItem 无法在给定位置找到任何文件。 在这种情况下,最可能的错误是路径错误。 我们多次交叉检查路径但没有发现任何错误。对于旧 PowerShell 版本,cmdlet "Get-Childitem" 是否有任何限制???

以上是关于用于删除或存档旧日志文件的 PowerShell 脚本在本地运行良好,但在远程位置无法运行的主要内容,如果未能解决你的问题,请参考以下文章

使用 powershell 压缩旧文件

使用 powershell 和 7zip 创建存档的脚本

powershell 删除旧日志

NLog - 每个应用程序运行 1 个日志并存档旧日志

NLog 不会删除旧文件

Log4J 未正确归档日志