invoke-expression PowerShell中的自定义表达式

时间:2014-01-21 17:20:55

标签: powershell expression

我在PowerShell中使用了以下代码中的Invoke-expression命令:

$command="Get-ADUser -Properties $PropertiesSelected -filter $FilterSelected -SearchScope Subtree -SearchBase '$DomainSelected' -Server MyServer:3268|Select $PropertiesSelected,$DomainSelected"
Invoke-expression $command

第一件事:

$PropertiesSelected中,我有LastLogonTimeStamp属性,因为你知道如果没有自定义表达式,这个值就不容易阅读。 通常我用它来转换:

@{Name="LastLogonDate"; Expression={[system.DateTime]::FromFileTime($($_.lastLogonTimestamp))}}

但如果我尝试在我的脚本中“select”部分的末尾添加它,它就不起作用了:

UserExctractWithSelectedPropertiesandDomain.ps1 
+ $command="Get-ADUser -Properties $PropertiesSelected -filter $FilterSelected -Se...

Unexpected token 'LastLogonDate"; Expression={[system.DateTime]::FromFileTime($($_.lastLogonTimestamp))}}"' in expression or statement.

我认为这是一个语法问题,但我不知道如何解决这个问题。

我的第二点是关于$DomainSelected变量。

我的完整脚本就是这样:

Import-Csv c:\TempPowerShell\CheckBoxResults.csv -delimiter ";"|
ForEach-Object {

$PropertiesSelected=$_.PropertiesSelected
$FilterSelected=$_.FilterSelected

Import-Csv c:\TempPowerShell\CheckBoxResultsDomain.csv -Delimiter ";" |
ForEach-Object{
$DomainSelected=$_.DomainSelected


Write-Host "PropertiesSelected=$PropertiesSelected / FilterSelected=$FilterSelected / DomainSelected=$DomainSelected"
    $command="Get-ADUser -Properties $PropertiesSelected -filter $FilterSelected -SearchScope Subtree -SearchBase '$DomainSelected' -Server D0004bel.bel.com:3268|Select $PropertiesSelected,$DomainSelected,@{Name="LastLogonDate"; Expression={[system.DateTime]::FromFileTime($($_.lastLogonTimestamp))}}"
    Invoke-expression $command 

    } 
        }

checkboxresults.csv文件内容此类数据:

PropertiesSelected;FilterSelected
GivenName,sn,TargetAddress,LastLogonTimeStamp ; *

CheckBoxResultsDomain.csv文件内容如下:

DomainSelected
"DC=World,DC=MyDomain,DC=COM"
"DC=pt,DC=MyDomain,DC=COM"
"DC=jp,DC=MyDomain,DC=COM"

当我执行我的脚本时,我想为每一行选择域名,但我只在第一行选择。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

通过将"替换为计算属性中的',可以轻松修复select语句中的语法错误:

@{Name='LastLogonDate'; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}}

我不确定你的第二个问题是什么意思,但要注意详细说明吗?