与-iin或-iicontains的IF逻辑比较失败



我会第一个承认我是黑客。我的代码看起来很糟糕,我相信还有更好的方法。请温柔一点。

我的目标是创建一个自动脚本来测试数据库的恢复,然后对所述数据库运行检查。第一步是在服务器上随机选择一个"用户"数据库。

我尝试过将这两个项都设置为字符串,甚至修剪得到的数据库名称,但没有成功。无论选择了什么数据库,都会通过检查。伙计们,我做错了什么?

感谢

#Get a count on the number of databases on the server
$db_count = sqlcmd -S localhost -d MASTER -h -1 -Q "SET NOCOUNT ON Select count(*) from sysdatabases"

# get a random number between 4 and the number of databases (system db's number 1-4)
$rand_db_num = Get-Random -Minimum 4 -Maximum $db_count
"Our random number is $rand_db_num"
# don't want these databases to be chosen
[string]$data = 'HOLDING','DBA','SSISDB','ReportServer','SQLDBA'

# Getting the database name that matches the random number
[string]$db_name = sqlcmd -S localhost -d Master -h -1 -Q "SET NOCOUNT ON Select name from sysdatabases where dbid = $rand_db_num"
#$db_name = $db_name.Trim()
"Checking to see what the number $rand_db_num database is: $db_name"

If ($db_name -icontains $data){

"chosen database name is $db_name"

}ELSE {

"Let's try this again"
}

在这方面你有一个非常好的开始,但你过于复杂了。数据库非常擅长对数据进行排序,并为你提供你想要的结果,所以直接在查询中限制数据库:

$query = "SET NOCOUNT ON SELECT name FROM sysdatabases WHERE name NOT IN ('master','tempdb','model','msdb','HOLDING','DBA','SSISDB','ReportServer','SQLDBA')"
$dbs = sqlcmd -S localhost -d MASTER -h -1 -Q $query

将该逻辑移动到查询中,只会给您想要的结果,从而真正简化了事情。因此,不再需要验证检查:

$db = Get-Random -InputObject $dbs -Count 1
$db

最新更新