Powershell 如何在连接字符串中用*替换密码字符?

Powershell 如何在连接字符串中用*替换密码字符?,powershell,Powershell,我在这方面没有得到正确的帮助 因此,我在这里发布另一个我想到的选项: 我有下面的脚本可以更改1100级和1400级多维数据集/数据库的连接字符串 $newConnectionString = "Connection Timeout=120;User Id=UID1;Data Source=datasource.com;Password=password123553;Persist Security Info=True;Session Character Set=UTF8" $AS = New-

我在这方面没有得到正确的帮助

因此,我在这里发布另一个我想到的选项:

我有下面的脚本可以更改1100级和1400级多维数据集/数据库的连接字符串

$newConnectionString = "Connection Timeout=120;User Id=UID1;Data Source=datasource.com;Password=password123553;Persist Security Info=True;Session Character Set=UTF8"

$AS = New-Object Microsoft.AnalysisServices.Server  
$AS.connect("$Server")

$cubeName = $Analysis_Server.Databases.FindByName($Cube)
$compatibility_lvl = $cubeName.CompatibilityLevel

if ($compatibility_lvl -lt 1200) #1103
{
    $cubeName.DataSources[0].ConnectionString = $newConnectionString
    $cubeName.DataSources[0].Update()

    $lt1200 = $($cubeName.DataSources[0].ConnectionString)
    Write-Host "$lt1200`r`n" -Fore yellow
}
else
{
    $TAS = new-Object Microsoft.AnalysisServices.Tabular.Server
    $TAS.Connect("$Server")

    $TAS.Databases[$Cube].model.datasources[0].ConnectionString = $newConnectionString
    $TAS.Databases[$Cube].Update([Microsoft.AnalysisServices.UpdateOptions]::ExpandFull)    

    $gt1200 = $($TAS.Databases[$Cube].model.datasources[0].ConnectionString)

    Write-Host "$gt1200`r`n" -Fore yellow
}
从这些声明中:

$lt1200 = $($cubeName.DataSources[0].ConnectionString)
Write-Host "$lt1200`r`n" -Fore yellow

$gt1200 = $($TAS.Databases[$Cube].model.datasources[0].ConnectionString)
Write-Host "$gt1200`r`n" -Fore yellow
这就是我得到的输出

连接超时=120;用户Id=UID1;资料 Source=datasource.com;密码=密码123553;持久安全信息=True;会话字符集=UTF8

我应该只将其作为输出返回:

连接超时=120;用户Id=UID1;数据源=datasource.com;持久安全信息=True;会话字符集=UTF8

由于我无法找到刷新数据源的方法,除非重新连接到服务器并打印出不带密码的连接字符串,因此我希望用以下场景替换密码:

$lt1200 = $($cubeName.DataSources[0].ConnectionString) -Replace($_ "Password=*?;", "Password=********");
  • 将密码值替换为全星形
  • 连接超时=120;用户Id=UID1;资料 Source=datasource.com;密码=********;持久安全信息=True;会话字符集=UTF8

  • 保留密码值的第一个和最后一个字符,但将中间的字符替换为全星形
  • 连接超时=120;用户Id=UID1;资料 Source=datasource.com;密码=p*******3;持久安全信息=True;会话字符集=UTF8

  • 保留密码的前3个值,并用星号替换其余值
  • 连接超时=120;用户Id=UID1;资料 Source=datasource.com;密码=pas********;持久安全信息=True;会话字符集=UTF8

    我知道会是这样的,但我不确定在上述情况下正则表达式会是什么:

    $lt1200 = $($cubeName.DataSources[0].ConnectionString) -Replace($_ "Password=*?;", "Password=********");
    

    替换为与密码相同的长度。不是很优雅,但很管用

    函数隐藏连接字符串密码{
    param(
    [字符串]$ConnectionString
    )
    $re=[regex]::new(“密码=(.*);”)
    $match=$re.match($ConnectionString)
    [string]$password=$match.Groups[1]。值
    [string]$stars=“*”*$password.Length
    返回$ConnectionString-替换“Password=.*”,“Password=$stars;”
    }
    
    Hide ConnectionStringPassword“Source=datasource.com;Password=password123553;”
    
    产出:

    Source=datasource.com;Password=**************;
    

    替换为与密码相同的长度。不是很优雅,但很管用

    函数隐藏连接字符串密码{
    param(
    [字符串]$ConnectionString
    )
    $re=[regex]::new(“密码=(.*);”)
    $match=$re.match($ConnectionString)
    [string]$password=$match.Groups[1]。值
    [string]$stars=“*”*$password.Length
    返回$ConnectionString-替换“Password=.*”,“Password=$stars;”
    }
    
    Hide ConnectionStringPassword“Source=datasource.com;Password=password123553;”
    
    产出:

    Source=datasource.com;Password=**************;
    

    您可能应该查看
    SqlConnectionStringBuilder
    .net类。它可以解析连接字符串并将其转换为对象。您不需要正则表达式来查找密码,您可以轻松地将密码替换为您想要的任何内容

    $builder=[System.Data.SqlClient.SqlConnectionStringBuilder]::新建('Connection Timeout=120;User Id=UID1;Data Source=datasource.com;Password=password123553;'))
    $builder.Password
    
    您可能应该查看
    SqlConnectionStringBuilder
    .net类。它可以解析连接字符串并将其转换为对象。您不需要正则表达式来查找密码,您可以轻松地将密码替换为您想要的任何内容

    $builder=[System.Data.SqlClient.SqlConnectionStringBuilder]::新建('Connection Timeout=120;User Id=UID1;Data Source=datasource.com;Password=password123553;'))
    $builder.Password
    

    who这是一个简单问题的大量背景信息。星星需要和密码一样长吗?@jakobi是的,如果可能的话,星星应该和密码一样长,这样我们就可以知道正确的密码被更改了。此外,我发布了同样多的细节,因为我过去没有提供理解为什么或我更新了我下面的评论以包括相同长度替换的示例所需的所有细节而受到嘲笑。@Jakobi谢谢,其他两种情况如何?你的最终目标是什么?您只想清除密码吗?您正在尝试使用windows凭据进行连接吗?或者你只是试图创建不包括密码的日志?这是一个简单问题的大量背景信息。星星需要和密码一样长吗?@jakobi是的,如果可能的话,星星应该和密码一样长,这样我们就可以知道正确的密码被更改了。此外,我发布了同样多的细节,因为我过去没有提供理解为什么或我更新了我下面的评论以包括相同长度替换的示例所需的所有细节而受到嘲笑。@Jakobi谢谢,其他两种情况如何?你的最终目标是什么?您只想清除密码吗?您正在尝试使用windows凭据进行连接吗?或者你只是想创建不包含密码的日志?等等…也许你在我发表评论之前就发布了这个。你能根据密码长度把它变成星号吗?我不想这样硬编码密码=*******这里有一个简单的函数,它将返回与密码长度相同的星星。有趣。如果我想保留密码值的第一个和最后一个字符,但将中间的字符替换为全明星:password=p*******3;这部分可以更动态地知道密码在连接字符串中的位置吗?目前,数组[1]要求将“Password”作为字符串中的第二个“group”,但是否有可能使它能够智能地自行识别它呢?[string]$password=$match.Groups[1].Valuewait…可能是您在我发表评论之前发布的。你能根据密码长度把它变成星号吗?我不想这样硬编码密码=*******这里有一个简单的函数,它将返回与密码长度相同的星星。有趣。如果我想保留密码值的第一个和最后一个字符,但将中间的字符替换为所有st,该怎么办