小编Igo*_*gor的帖子

Get-ChildItem和不间断的空间

在我的文件服务器上工作时,我注意到一个破坏我脚本的奇怪文件夹.文件夹的名称只包含一个ascii值为160的字符(不间断空格,NBSP).在视觉上,该名称与空格字符相同.

简而言之,我已经Get-ChildItem在这个文件夹上执行,它正在进入无限循环.命令实际上是针对父文件夹执行的,它又返回有问题的文件夹,所以我的脚本进入无限循环.

您可以在自己的环境中轻松模拟这一点.在C:\temp文件夹中创建名称仅包含NBSP的新文件夹.您可以使用按住alt并在数字键盘上按0160键入.创建后,运行

Get-ChildItem C:\Temp\ -Recurse
Run Code Online (Sandbox Code Playgroud)

虽然我只有一个文件夹,但你会得到无名的文件夹列表.

d-----        6/15/2017   2:20 PM
d-----        6/15/2017   2:20 PM
d-----        6/15/2017   2:20 PM
d-----        6/15/2017   2:20 PM
d-----        6/15/2017   2:20 PM
. . .
Run Code Online (Sandbox Code Playgroud)

我在PowerShell 4和5上对服务器和客户端操作系统进行了测试,结果与此相同.命令Get-Item也有这个名称的问题,并且两个开关-Path-LiteralPath行为都以相同的方式.我也试过[System.IO.Directory]课,但它有同样的问题.

问题:我已更新我的脚本以报告带有此名称的文件夹作为错误并跳过它,但我想知道是否有更聪明的方法来做到这一点?我的目标是Get-ChildItem对这样的文件夹运行或等效.

这是一个已知的问题?如果被更多人确认,那么值得在某处报告它作为一个错误吗?

powershell get-childitem

32
推荐指数
1
解决办法
910
查看次数

PowerShell 在运行 Import-Module 时忽略 Write-Verbose

为了解决这个问题,我将这个简单的脚本保存为 PowerShell 模块 ( test.psm1)

Write-Verbose 'Verbose message'
Run Code Online (Sandbox Code Playgroud)

在现实生活中,它包括导入附加功能的命令,但目前无关紧要。

如果我跑,Import-Module .\test.psm1 -Verbose -Force我只会得到

VERBOSE: Loading module from path 'C:\tmp\test.psm1'.
Run Code Online (Sandbox Code Playgroud)

我的Write-Verbose被忽略

我尝试添加cmdletbinging但它也不起作用。

[cmdletbinding()]
param()

Write-Verbose 'Verbose message'
Run Code Online (Sandbox Code Playgroud)

任何线索如何在导入 PowerShell 模块时提供详细输出?

PS我不想总是显示详细信息,但只有在-Verbose指定时才显示。这是我对这两种不同情况的预期输出:

PS C:\> Import-Module .\test.psm1 -Verbose -Force # with verbose output
VERBOSE: Loading module from path 'C:\tmp\test.psm1'.
VERBOSE: Verbose message

PS C:\> Import-Module .\test.psm1 -Force # without verbose output

PS C:\>
Run Code Online (Sandbox Code Playgroud)

powershell module verbose

5
推荐指数
1
解决办法
201
查看次数

标签 统计

powershell ×2

get-childitem ×1

module ×1

verbose ×1