如何附加到powershell哈希表值?

ibps3vxo  于 2022-10-22  发布在  Shell
关注(0)|答案(3)|浏览(144)

我正在通过Microsoft.SqlServer.Management.Smo.Server对象列表进行交互,并将它们添加到哈希表中,如下所示:

$instances = Get-Content -Path .\Instances.txt
$scripts = @{}

foreach ($i in $instances)
{
    $instance = New-Object Microsoft.SqlServer.Management.Smo.Server $i
    foreach($login in $instance.Logins)
    {
        $scripts.Add($instance.Name, $login.Script())       
    }
}

到现在为止,一直都还不错。我现在想做的是在哈希表值的末尾追加一个字符串。因此,对于一个$instance,我想将一个字符串附加到该$instance的哈希表值。我该怎么做?我已经开始这样做了,但我不确定我是否走对了方向:

foreach ($db in $instance.Databases)
{       
    foreach ($luser in $db.Users)
    {
        if(!$luser.IsSystemObject)
        {
            $scripts.Set_Item ($instance, <what do I add in here?>)
        }
    }
}

干杯

svgewumm

svgewumm1#

$h= @{}

$h.add("Test", "Item")
$h

Name                           Value                                                                                                                                                   
----                           -----                                                                                                                                                   
Test                           Item                                                                                                                                                    

$h."Test" += " is changed"
$h

Name                           Value                                                                                                                                                   
----                           -----                                                                                                                                                   
Test                           Item is changed
ccgok5k5

ccgok5k52#

我会用这个密码。

$instances = Get-Content -Path .\Instances.txt
$scripts = @{}

foreach ($i in $instances)
{
    $instance = New-Object Microsoft.SqlServer.Management.Smo.Server $i
    foreach($login in $instance.Logins)
    {
        $scripts[$instance.Name] = @($scripts[$instance.Name]) + $login.Script().ToString()
    }
}

.

foreach ($db in $instance.Databases)
{
    foreach ($luser in $db.Users)
    {
        if(!$luser.IsSystemObject)
        {
            $scripts[$instance] = @($scripts[$instance]) + $luser.Script().ToString()
        }
    }
}

结果将是一个哈希表,每个示例作为一个键,以及一个字符串数组,其中每个字符串都是用户的T-SQL脚本。

rsaldnfx

rsaldnfx3#

.Script()方法返回一个字符串集合。也许有一种更优雅的方法,但替换

$scripts.Set_Item ($instance, <what do I add in here?>)

具有

$val = $scripts[$instance]
$val.Add("text to add")
$scripts.Set_Item($instance, $val)

应该起作用。

相关问题