Sql server 在PowerShell中将字符串拆分为单独的字符串
我的脚本在powershell中运行:test.ps1-dbo test1=>这可以工作,它将进入提供的数据库Sql server 在PowerShell中将字符串拆分为单独的字符串,sql-server,powershell,Sql Server,Powershell,我的脚本在powershell中运行:test.ps1-dbo test1=>这可以工作,它将进入提供的数据库 从sys.databases中选择名称 其中名称不在('master','tempdb','model','msdb','test1'); 但是如果我想输入多个数据库,例如test.ps1-dbotest1、test2、test3=>这将被读取为一个字符串 从sys.databases中选择名称 其中名称不在('master','tempdb','model','msdb','tes
从sys.databases中选择名称
其中名称不在('master','tempdb','model','msdb','test1');
但是如果我想输入多个数据库,例如test.ps1-dbotest1、test2、test3=>这将被读取为一个字符串
从sys.databases中选择名称
其中名称不在('master','tempdb','model','msdb','test1,test2,test3');
如何在Powershell中将字符串拆分为单独的字符串,如下所示:
从sys.databases中选择名称
其中名称不在('master','tempdb','model','msdb','test1','test2','test3');
代码:
Param(
[参数(必需=$false,ValueFromPipeline=$true)]
[别名(“dbo”)]
[字符串[]]
$databaseName
)
$dbquery=@”
从sys.databases中选择名称
其中名称不在('master','tempdb','model','msdb','$databaseName');
"@
调用Sqlcmd-ServerInstance“$databaseIP”-数据库“master”-用户名$databaseUser-密码$databasePass-查询$dbquery
我尝试过使用split and join,但它并没有像我预期的那样工作。注意:任何时候,当您获取参数并将其直接放入SQL字符串中时,您都可能遇到恶意代码编写者和SQL注入问题。在SQL字符串中使用输入之前,建议对输入进行清理(确保输入有效) 通过将字符串数组放入字符串中而无需进行预处理,您就可以得到所需的内容。一种简单的方法是首先填充数组成员之间的内容,因此添加
,“
和-join
,如下所示(按照@CaiusJard的建议为数组添加复数数组名):
我希望这对您有所帮助。FYI,
dbo.sysdatabases
已经被弃用多年了(可能是自SQL Server 2000以来,我真的记不起来了?)。您真的应该使用sys.databases
谢谢您提供的信息。
Param(
[Parameter(Mandatory=$false, ValueFromPipeline=$true)]
[Alias("dbo")]
[String[]]
$databaseNames
)
$databaseNameString = $databaseNames -join "', '"
$dbquery = @"
SELECT name FROM master.dbo.sysdatabases
where name not in ('master', 'tempdb', 'model', 'msdb', '$databaseNameString');
"@
Invoke-Sqlcmd -ServerInstance "$databaseIP" -Database "master" -Username $databaseUser -Password $databasePass -Query $dbquery