为什么不调用-sqlcmd return ALL 查询数据

Why doesn't invoke-sqlcmd return ALL the query data

我在 SQL Server 2014 中 运行 以下查询:

SELECT
    dp.class_desc, dp.permission_name, dp.state_desc,
    ObjectName = OBJECT_NAME(major_id), 
    GranteeName = grantee.name, GrantorName = grantor.name
FROM 
    sys.database_permissions dp
JOIN
    sys.database_principals grantee ON dp.grantee_principal_id = grantee.principal_id
JOIN 
    sys.database_principals grantor ON dp.grantor_principal_id = grantor.principal_id

我得到了我期望的所有行。我创建了测试数据库用户和角色,并且看到了它们。

当我在 powershell 中 运行 它时:

(invoke-sqlcmd 'select dp.class_desc, dp.permission_name, dp.state_desc,
ObjectName = OBJECT_NAME(major_id), GranteeName = grantee.name, GrantorName = grantor.name
FROM sys.database_permissions dp
JOIN sys.database_principals grantee on dp.grantee_principal_id = grantee.principal_id
JOIN sys.database_principals grantor on dp.grantor_principal_id = grantor.principal_id -ServerInstance Blah\blah)

我没有在输出中看到我的测试数据库 users/roles。我正在使用 Windows 身份验证。同一用户正在 运行 使用 PowerShell 命令并通过 SSMS 连接。此外,在我的 PowerShell 输出中,我看到禁用的帐户。当我 运行 SSMS 中的查询时,我没有看到。

关于如何从 PowerShell 获得与从 SSMS 获得相同结果的任何建议?

我不认为你 运行 这两个命令针对同一个数据库。也就是说,在 SSMS 中,您 运行 它针对您想要的数据库,但是在您的 Invoke-SqlCmd 命令中,您没有指定您 运行 针对哪个数据库。它将默认为数据库 master,这就是您看到 "disabled" 帐户的原因。尝试指定 -Database 参数。

(invoke-sqlcmd 'select dp.class_desc, dp.permission_name, dp.state_desc,
ObjectName = OBJECT_NAME(major_id), GranteeName = grantee.name, GrantorName = grantor.name
FROM sys.database_permissions dp
JOIN sys.database_principals grantee on dp.grantee_principal_id = grantee.principal_id
JOIN sys.database_principals grantor on dp.grantor_principal_id = grantor.principal_id' -ServerInstance 'Blah\blah' -Database 'MyDatabase')