【发布时间】:2019-07-09 08:31:07
【问题描述】:
我没有收到关于这个question的正确帮助
所以我在这里发布我想到的另一个选项:
我有以下脚本可以更改级别 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;Password=password123553;Persist Security Info=True;Session Character Set=UTF8
我应该只将其作为输出返回:
Connection Timeout=120;User Id=UID1;Data Source=datasource.com;Persist Security Info=True;Session Character Set=UTF8
由于除了重新连接到服务器并打印出没有密码的连接字符串外,我找不到刷新数据源的方法,因此我希望用正则表达式替换密码,如下所示:
- 用所有星号替换密码值
连接超时=120;用户 ID=UID1;数据 Source=datasource.com;Password=********;Persist Security Info=True;Session Character Set=UTF8
- 保留密码值的第一个和最后一个字符,但将中间替换为全星
连接超时=120;用户 ID=UID1;数据 Source=datasource.com;Password=p*******3;Persist Security Info=True;Session Character Set=UTF8
- 保留密码的前 3 个值并用星号替换其余的值
连接超时=120;用户 ID=UID1;数据 Source=datasource.com;Password=pas********;Persist Security Info=True;Session Character Set=UTF8
我知道它会是这样的,但我不确定正则表达式对于上述情况会是什么:
$lt1200 = $($cubeName.DataSources[0].ConnectionString) -Replace($_ "Password=*?;", "Password=********");
【问题讨论】:
-
谁是一个简单问题的大量背景信息。星星需要和密码一样长吗?
-
@Jakobii 是的,如果可能的话,它们应该是相同的长度,这样我们就可以知道正确的密码被更改了。另外,我发布了尽可能多的细节,因为我过去曾因为没有提供所有必要的细节来理解为什么或什么而受到嘲笑
-
我在下面更新了我的评论以包含相同长度替换的示例。
-
@Jakobii 谢谢,其他两种情况呢?
-
你的最终目标是什么?你只是想清除密码?您是否尝试使用您的 Windows 凭据进行连接?还是您只是想创建排除密码的日志?
标签: powershell