Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在PowerShell中将字符串拆分为单独的字符串_Sql Server_Powershell - Fatal编程技术网

Sql server 在PowerShell中将字符串拆分为单独的字符串

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

我的脚本在powershell中运行:test.ps1-dbo test1=>这可以工作,它将进入提供的数据库

从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