如何附加到powershell哈希表值?

发布于 2024-10-06 18:47:23 字数 781 浏览 5 评论 0原文

我正在通过 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?>)
        }
    }
}

干杯

I am interating through a list of Microsoft.SqlServer.Management.Smo.Server objects and adding them to a hashtable like so:

$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())       
    }
}

So far so good. What I want to do now is append a string to the end of the hashtable value. So for an $instance I want to append a string to the hashtable value for that $instance. How would I do that? I have started with this, but I'm not sure if I'm on the right track:

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

Cheers

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

策马西风 2024-10-13 18:47:23
$h= @{}

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

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

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

Name                           Value                                                                                                                                                   
----                           -----                                                                                                                                                   
Test                           Item is changed                                                                                                                                         
$h= @{}

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

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

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

Name                           Value                                                                                                                                                   
----                           -----                                                                                                                                                   
Test                           Item is changed                                                                                                                                         
叶落知秋 2024-10-13 18:47:23

我会使用这段代码。

$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 脚本。

I would go with this code.

$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()
        }
    }
}

The result will be a hash table with each instance as a key, and an array of strings where each string is the T-SQL script for a user.

零崎曲识 2024-10-13 18:47:23

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

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

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

应该可行。

The .Script() method returns a string collection. There's probably a more elegant way of doing it, but replacing

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

with

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

should work.

单身狗的梦 2024-10-13 18:47:23
$test = @{}

$test.Hello = "Hello World"

Write-Host "message from $($test.Hello)"

$test.Hello += " Cosmonaut"

Write-Host "message from $($test.Hello)"

输出

$test = @{}

$test.Hello = "Hello World"

Write-Host "message from $($test.Hello)"

$test.Hello += " Cosmonaut"

Write-Host "message from $($test.Hello)"

output

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文