在PowerShell中,我想运行Invoke-DbaQuery dbattools命令并使用带有-File参数的UNC路径:
Invoke-DbaQuery -SQLInstance $SQL_host -Database $DatabaseName -File "\file_svrscriptdiruserlist.sql"
命令运行没有错误,但不产生任何输出。有人知道这是可能的吗?如果是这样,我错过了什么?
结果显示调用一直在工作,但输出不可见。这是因为脚本有这样的代码:
DECLARE UserCursor CURSOR FOR
SELECT
'CREATE USER ' + SPACE(1) + QUOTENAME([name]) + ' FOR LOGIN ' + QUOTENAME([name]) + ' WITH DEFAULT_SCHEMA = ' + QUOTENAME([default_schema_name]) + ';'
AS [-- SQL STATEMENTS --]
FROM sys.database_principals AS rm
WHERE [type] IN ('U', 'S', 'G') -- windows users, sql users, windows groups
AND [name] <> 'dbo'
AND [name] <> 'guest'
AND default_schema_name is not null
OPEN UserCursor
FETCH NEXT FROM UserCursor INTO @addUserScript
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @addUserScript
FETCH NEXT FROM UserCursor INTO @addUserScript
END
CLOSE UserCursor
DEALLOCATE UserCursor;
解决方案是这样调用脚本:
Invoke-DbaQuery `
-SQLInstance $HCM_SQL_host `
-Database $Refresh_database `
-Verbose 4>&1 `
-File "\file-srv0scriptdirUserlist.sql" | `
out-string -Width 250 | Out-File -FilePath $Create_Users_File_Fullname
注意"-Verbose 4; &1 ' "它将详细输出(即PRINT输出)重定向回标准输出,并最终重定向到文件。