在 Powershell 的计算字段中使用函数?

Using a function in a calculated field in Powershell?

所以我有这个:

get-ADUser -SearchRoot 'boogers.com/Locations/Kleenex' | 
Where-Object { $_.TITLE -ne 'Snot' } | 
Select LastName,FirstName,Description,SamAccountName,Department,TITLE, @{Name='bs_value';Expression=@{Name='TITLE'; Expression={(Get-Culture).TextInfo.ToTitleCase($_.Title.ToLower())}}

它工作得很好,直到,哦,我不知道,我想要另一个计算字段...然后它变得 太长了!

所以我写了一个函数:

function tc($name, $str) {
    return @{Name=$name; Expression={(Get-Culture).TextInfo.ToTitleCase($str.ToLower())}}
}

看起来很合理,不是吗?

但是如果我运行函数:

$bob = tc 'Title' 'bob'

我得到:

Name                           Value
----                           -----
Expression                     (Get-Culture).TextInfo.ToTitleCase($str.ToLower())
Name                           Title

而不是...

Name                           Value
----                           -----
Expression                     "Bob"
Name                           Title

我只是希望代码更短!我在用电脑!

因为你没有展示你是如何调用我在评论中提到的修改函数的,我认为你没有正确使用它。 [grin] 你的函数是......相当奇特,所以我重写了它以更正常的方式工作。

function ConvertTo-TitleCase ([string]$InString)
    {
    (Get-Culture).TextInfo.ToTitleCase($InString.ToLower())
    }

Get-LocalUser |
    Where-Object {
        $_.Name -notmatch "Admin|Guest|Home|$env:USERNAME"
        } | 
    Select-Object -Property Name, FullName, Enabled,
        @{Name='bs_value';Expression={ConvertTo-TitleCase -InString $_.Description}}

我的本地使用列表的输出...

Name   FullName        Enabled bs_value                                   
----   --------        ------- --------                                   
22     2 Digit 2          True The Digit 2 Twice                          
TooToo Too Also Too       True The Word For Also, Repeated Twice          
ToTo   To Thataway To     True The Destination Designator, Two Times.     
Tutu   Tutu Dress Tutu    True The Ballet Apparel For Ladies.             
TwoTwo Two Number Two     True Repeating The Name Of The Number After One.