相关疑难解决方法(0)

PowerShell 递归对象属性

我需要一种方法(递归地)为我提供对象的所有属性。不知道传输的对象有多少个子对象。

示例对象:

$Car = [PSCustomObject] @{
    Tire          = [PSCustomObject] @{
        Color = "Black"
        Count = 4
    }

    SteeringWheel = [PSCustomObject]@{
        Color   = "Blue"
        Buttons = 15
    }
}
Run Code Online (Sandbox Code Playgroud)

太感谢了!

powershell recursion object

4
推荐指数
1
解决办法
2774
查看次数

Receive-Job 返回的意外变量类型

我正在尝试执行Invoke-Sqlcmd命令(来自SqlServer 模块)以作为不同的 AD 用户运行查询。我知道有-Credential争论,但这似乎不起作用。

因此,我认为 usingStart-Job可能是一种选择,如下面的代码片段所示。

$username = 'dummy_domain\dummy_user'
$userpassword = 'dummy_pwd' | ConvertTo-SecureString -AsPlainText -Force
$credential = New-Object -TypeName System.Management.Automation.PSCredential ($username, $password)

$job = Start-Job -ScriptBlock {Import-Module SqlServer; Invoke-Sqlcmd -query "exec sp_who" -ServerInstance 'dummy_mssql_server' -As DataSet} -Credential $credential

$data = Receive-Job -Job $job -Wait -AutoRemoveJob
Run Code Online (Sandbox Code Playgroud)

但是,在查看作业返回的变量类型时,这不是我所期望的。

> $data.GetType().FullName
System.Management.Automation.PSObject

> $data.Tables[0].GetType().FullName
System.Collections.ArrayList
Run Code Online (Sandbox Code Playgroud)

如果我ScriptBlock直接在 中运行代码,这些是 PS 返回的变量类型:

> $data.GetType().FullName
System.Data.DataSet

> $data.Tables[0].GetType().FullName
System.Data.DataTable
Run Code Online (Sandbox Code Playgroud)

我尝试将$data变量强制转换为[System.Data.DataSet],这导致了以下错误消息:

Cannot convert …
Run Code Online (Sandbox Code Playgroud)

sql-server powershell

2
推荐指数
1
解决办法
334
查看次数

标签 统计

powershell ×2

object ×1

recursion ×1

sql-server ×1