首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Out-GridView (powershell 4)中的额外空列?

Out-GridView (powershell 4)中的额外空列?
EN

Stack Overflow用户
提问于 2020-07-16 13:48:36
回答 1查看 60关注 0票数 0

我有以下代码片段:

代码语言:javascript
复制
function MyTestString
{   
    [string]$OutString
    $OutString = 'ABCDEFG'
    #$OutString | Out-GridView -Wait -Title "String inside function"
    
    return $OutString
}
$MyString = MyTestString | Out-GridView -Wait -Title "Getting Extra Column"

当我在Powershell中运行它时,我在网格视图中得到一个额外的空列。如果将Out-GridView放在函数内部,则没有空列。同样的事情也发生在Export-Clixml上。

如何避免网格中的空列?我想知道为什么我在GridView中得到一个空列。

下面是额外的空列的屏幕截图:

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-16 14:08:48

这将是额外的row而不是列,这是由函数体引起的。让我们来检查一下。

代码语言:javascript
复制
function MyTestString
{
    [string]$OutString
    $OutString = 'ABCDEFG'
    return $OutString
}

MyTestString     

ABCDEFG

好的,看起来直接调用会返回额外的行。真的是这样吗?

代码语言:javascript
复制
$o=MyTestString
$o 

ABCDEFG

让我们来看看$o的内部

代码语言:javascript
复制
$o.GetType()
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

现在我们取得了一些进展。该函数返回一个数组。它的内容呢?

代码语言:javascript
复制
PS C:\> $o[0]


PS C:\> $o[1]
ABCDEFG

第零个元素除了空之外什么都不包含。这看起来很奇怪,所以让我们确保Powershell使用的是严格模式(默认情况下它不会这样做。这是一个脑死亡的设计决策。)

代码语言:javascript
复制
Set-StrictMode -Version 'latest'
MyTestString
The variable '$OutString' cannot be retrieved because it has not been set.
At line:3 char:13
+     [string]$OutString
+             ~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (OutString:String) [], 
RuntimeException
    + FullyQualifiedErrorId : VariableIsUndefined

让我们再看看函数体:

代码语言:javascript
复制
{   
    [string]$OutString
    $OutString = 'ABCDEFG'
    #$OutString | Out-GridView -Wait -Title "String inside function"
    
    return $OutString
}

注意到[string]部分了吗?这不是可变声明。它会将其内容返回给管道。当Powershell不处于严格模式时,它会返回一个很大的空值-- $o[0]中的空元素。在严格模式下,Powershell会注意到正在访问未初始化的变量。

至于修复,请为OutString赋值-除非您正在尝试使用参数。

代码语言:javascript
复制
function MyTestString
{   
    [string]$OutString = 'ABCDEFG'
    return $OutString
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62928297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档