需要VB.Net到Powershell的帮助-枚举数据库角色权限

需要VB.Net到Powershell的帮助-枚举数据库角色权限,powershell,Powershell,我有一个VB.Net子例程,我正试图将其转换为Powershell。我不太擅长使用.Net,所以我需要一些帮助,但我找到了VB代码的基础,并设法使其工作。我正在为数据库中的所有对象编写脚本,需要获得角色权限。这是VB代码: Public Sub ObjectPermissions(ByVal dbrname As String) ' dbrname = database role name ' this code will enumerate permissions on o

我有一个VB.Net子例程,我正试图将其转换为Powershell。我不太擅长使用.Net,所以我需要一些帮助,但我找到了VB代码的基础,并设法使其工作。我正在为数据库中的所有对象编写脚本,需要获得角色权限。这是VB代码:

    Public Sub ObjectPermissions(ByVal dbrname As String)
  ' dbrname = database role name
    ' this code will enumerate permissions on objects for a role - need to exclude fixed and public roles
    Dim dbrp As ObjectPermissionInfo()
    dbrp = db.EnumObjectPermissions(dbrname)
    Dim opi As ObjectPermissionInfo
    If db.Roles(dbrname).IsFixedRole = False And db.Roles(dbrname).Name <> "public" Then
        For Each opi In dbrp
            fs.WriteLine("GRANT " + opi.PermissionType.ToString + " ON [" + opi.ObjectSchema + "].[" + opi.ObjectName + "] TO [" + opi.Grantee + "]")
            fs.Flush()
        Next
    End If

End Sub
Public子对象权限(ByVal dbrname作为字符串)
'dbrname=数据库角色名称
'此代码将枚举角色的对象权限-需要排除固定角色和公共角色
作为ObjectPermissionInfo()的Dim dbrp
dbrp=db.EnumObjectPermissions(dbrname)
Dim opi作为ObjectPermissionInfo
如果db.Roles(dbrname).IsFixedRole=False,db.Roles(dbrname).Name为“public”,则
对于dbrp中的每个opi
fs.WriteLine(“将[“+opi.ObjectSchema+”]。“+opi.ObjectName+”]上的“+opi.PermissionType.ToString+”授予[“+opi.Grantee+”]))
财政司司长
下一个
如果结束
端接头

以下是对PowerShell的直接翻译:

# substitute the assembly version to suit your SQL Server SMO version
Add-Type -AssemblyName 'Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'

$Server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -ArgumentList 'YourServer'
$Database = $Server.Databases['YourDatabase']
$DbrName = 'YourRole'

$Role = $Database.Roles[$DbrName]
if (-not $Role.IsFixedRole -and $Role.Name -ne 'public') {
    $Database.EnumObjectPermissions($DbrName) |
        ForEach-Object {
            Write-Output ('GRANT {0} ON [{1}].[{2}] TO [{3}]' -f $_.PermissionType, $_.ObjectSchema, $_.ObjectName, $_.Grantee)
        }
}