使用PowerShell为SSAS Role添加Membership
PowerShell, SSAS, Role, Membership
上篇随笔使用PowerShell创建SSAS Role贴出了如何使用PowerShell批量创建Role,由于个人项目需求,创建Role的步骤和添加Membership分开了,该文贴出如何使用PowerShell批量向Role中添加Membership。
代码如下:
# ---------------------------------------------------------
# AUTHOR: Niko / hewuquan@outlook.com / 2016-10-18
# For XX BI Project - Add Memebers to Role
# Steps:
# Param: MemberList.csv (DealerNo, DealerName, RoleType, Account)
# RoleType: 1: Parts; 2: Service; 3: Sales; 4: GM
# Function: Grant Account Role permissions
# --------------------------------------------------------- # ---------------------------------------------------------
# Load Assemblys And Modules
# ---------------------------------------------------------
If (![System.reflection.Assembly]::LoadWithPartialName(“Microsoft.AnalysisServices”))
{
Write-Host "[ERROR] Microsoft.AnalysisServices Assembly couldn't be loaded. Script will stop!"
Exit 1
}
If (![System.reflection.Assembly]::LoadWithPartialName(“System.IO”))
{
Write-Host "[ERROR] System.IO Assembly couldn't be loaded. Script will stop!"
Exit 1
} # ---------------------------------------------------------
# Static Variables
# ---------------------------------------------------------
$path = Split-Path -parent $MyInvocation.MyCommand.Definition
$newpath = $path + "\MemberList.csv"
$log = $path + "\Log.txt"
$date = Get-Date
$iRow = 1
$logMsg $server = New-Object Microsoft.AnalysisServices.Server
$server.Connect("Put Your Server Instance Here")
$dbName = "Put Your SSAS Database Name Here"
$database = $server.Databases.Item($dbName) # ---------------------------------------------------------
# Start Function
# ---------------------------------------------------------
Function Start-Commands
{
Load-CSV
} # ---------------------------------------------------------
# Function to Log
# ---------------------------------------------------------
Function Write-Log
{
$logMsg = "{0}: {1}" -f $date.ToString("yyyy-MM-dd hh:mm:ss"),$logMsg
Write-Host $logMsg
$logMsg | Out-File $log -Append
} # ---------------------------------------------------------
# Read Account From CSV and Add to Roles
# Read CSV => Add to Roles
# ---------------------------------------------------------
Function Load-CSV
{
$logMsg = "[INFO] Processing started"
Write-Log Import-Csv $newpath | ForEach-Object{
If ( ($_.DealerNo -eq "") -Or ($_.DealerName -eq "") -Or ($_.RoleType -eq "") -Or ($_.Account -eq "") )
{
$logMsg = "[ERROR] Please provide valid DealerNo, DealerName, RoleType and Account. Processing skipped for line $($iRow)"
Write-Log
Continue
} If ( $_.RoleType -eq 4 ) # 4: GM
{
$logMsg = "[INFO] Processing Line $($iRow), [$($_.DealerNo)], [$($_.DealerName)] ,[General Manager], [$($_.Account)]..."
Write-Log $roleName = $_.DealerNo + " " + $_.DealerName
Add-RoleMember $roleName $_.Account $iRow
}
elseIf ( $_.RoleType -eq 3 ) # 3: Sales
{
$logMsg = "[INFO] Processing Line $($iRow), [$($_.DealerNo)], [$($_.DealerName)] ,[Sales Manager], [$($_.Account)]..."
Write-Log $roleName = $_.DealerNo + " " + $_.DealerName
Add-RoleMember $roleName $_.Account $iRow
}
elseIf ( $_.RoleType -eq 2 ) # 2: Service
{
$logMsg = "[INFO] Processing Line $($iRow), [$($_.DealerNo)], [$($_.DealerName)] ,[Service Manager], [$($_.Account)]..."
Write-Log $roleName = $_.DealerNo + " " + $_.DealerName + " Service"
Add-RoleMember $roleName $_.Account $iRow
$roleName = $_.DealerNo + " " + $_.DealerName + " Parts"
Add-RoleMember $roleName $_.Account $iRow
}
elseIf ( $_.RoleType -eq 1 ) # 1: Parts
{
$logMsg = "[INFO] Processing Line $($iRow), [$($_.DealerNo)], [$($_.DealerName)] ,[Parts Manager], [$($_.Account)]..."
Write-Log $roleName = $_.DealerNo + " " + $_.DealerName + " Parts"
Add-RoleMember $roleName $_.Account $iRow
}
else
{
$logMsg = "[ERROR] Line $($iRow), RoleType: (1: Parts; 2: Service; 3: Sales; 4: GM). No Role for RoleType $($_.RoleType). Processing skipped for line $($iRow)"
Write-Log
} $iRow ++
}
} Function Add-RoleMember
{
param
(
[String] $RoleName,
[String] $Account,
[Int] $iRow
)
begin
{
}
process
{
$roleItem = $database.Roles.FindByName( $RoleName )
# Check Role
if ( !$roleItem)
{
$logMsg = "[ERROR] Role [$($roleName)] doesn't exists in current database. Processing skipped for line $($iRow)"
Write-Log
Return
}
# Check Membership
$IsExists = $false
$roleItem.Members | ForEach-Object{
if ( $_.Name.Contains($Account))
{
$logMsg = "[Info] Account [$($Account)] already exists in Role [$($RoleName)]. Processing skipped for line $($iRow)"
Write-Log
$IsExists = $true
}
}
If ( $IsExists) {Return}
# Add Account To Role
Try
{
$roleItem.Members.Add($Account)
$bi = $roleItem.Update()
$logMsg = "[INFO] Add Account [$($Account)] to Role [$($roleName)] Succeed."
Write-Log
}
Catch
{
$logMsg = "[INFO] Add Account [$($Account)] to Role [$($roleName)] Failed. $($_.Exception.Message)"
Write-Log
}
}
} Start-Commands
Write-Host -NoNewline "Press [Enter] to Exit..."
Read-Host
使用PowerShell为SSAS Role添加Membership的更多相关文章
- 使用PowerShell创建SSAS Role
PowerShell, SSAS, Role, DatabasePermission, Cube, Dimension, CubePermission, CubeDimensionCube 在SSAS ...
- 使用powershell为物理网卡添加多个IP地址
因特殊要求,需要给某物理网卡添加多个IP地址: powershell中有个netsh的命令,添加IPv4地址的方法: add address [name=]<字符串> [[ad ...
- Wordpress 为用户或角色 role 添加 capabilities(权限)
首先查看角色具有哪些权限: $admin_role_set = get_role( 'administrator' )->capabilities; $author_role_set = get ...
- powershell小脚本--批量添加用户属性----导出登录时间
需求1:某公司所有员工少了MAIL属性,需要批量添加.例如,用户chenyy 添加邮件属性chenyy@xxxx.com 先导出(只导出名字)备用: Get-ADUser -Filter * -Pr ...
- Windows 系统PowerShell或cmd设置添加静态路由方式
电脑上添加静态路由,PowerShell或cmd设置路由 方法/步骤1.首先以管理员身份在“运行”窗口输入cmd或PowerShell(按WIN+R打开运行窗口),然后回车进入命令行,输入 route ...
- SSAS动态添加分区(一)
一.动态分区的好处就不说了,随着时间的推移,不可能一个度量值组都放在一个分区中,处理速度非常慢,如何动态添加分区,如何动态处理分区,成为了很多新手BI工程师一个头痛的问题,废话不多说,分享一下我的经验 ...
- SSAS动态添加分区 (转载)
一.动态分区的好处就不说了,随着时间的推移,不可能一个度量值组都放在一个分区中,处理速度非常慢,如何动态添加分区,如何动态处理分区,成为了很多新手BI工程师一个头痛的问题,废话不多说,分享一下我的经验 ...
- Powershell查看SSAS Cube占用磁盘空间
以下是用powershell查看Cube占用磁盘空间大小的方式.可以编译成函数也可以直接把参数改成需要的服务器名称. Param($ServerName="SERVERNAME") ...
- Powershell About Active Directory Group Membership of a domain user
使用Get-User命令去寻找group membership of a domain user $((Get-ADUser Wendy -Properties *).MemberOf -split ...
随机推荐
- WPF制作歌词动画
最近再做一个UWP的音乐播放器,今天实现了歌词动画,不是滚动的,滚动的慢慢研究 思路:在右边放了三个textBlock,设置 textBlock的effect属性 <TextBlock.Effe ...
- ASP.NET Core学习总结(2)
public class ControllerActionInvoker : ResourceInvoker, IActionInvoker 我们知道,ControllerActionInvoker实 ...
- Sql语法高级应用之二:视图
SQL CREATE VIEW 语句 什么是视图? 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中 ...
- sqlite批量处理数据性能优化
最近设计到sqlite数据库批量操作的,性能很是问题.于是一番研究(站在巨人肩膀)从网上整理出来相关性能优化方向.大体分三个级别,一般第一个阶段已足够. 1.sqlite每次插入数据(每调用一次sql ...
- deamo的网址
https://blog.csdn.net/jydave/article/details/50656455 广播(Broadcast)的简单用法 http://www.cgtsj.com/cg/ ...
- change和onChange
change是jquery上的绑定事件,可用于下拉框动态关联数据: $(function(){ $("#id").change(function(e){ alert($(this) ...
- AcWing 143. 最大异或对
https://www.acwing.com/problem/content/145 #include <iostream> #include <algorithm> usin ...
- AVA + Spectron + JavaScript 对 JS 编写的客户端进行自动化测试
什么是 AVA (类似于 unittest) AVA 是一种 JavaScript 单元测试框架,是一个简约的测试库.AVA 它的优势是 JavaScript 的异步特性和并发运行测试, 这反过来提高 ...
- 【文文殿下】CF1029F Multicolored Markers
这道题考场上卡了文文相当长的时间,所以写个题解泄泄愤QAQ 题意:给你$a$块红瓷砖,$b$块白瓷砖,在一个无限大的地上拼装,要求整体是一个矩形,并且至少有一种颜色是一个矩形,求最小周长. 题解: 首 ...
- [JS] 屏蔽右键
if (window.Event) document.captureEvents(Event.MOUSEUP); function nocontextmenu() { event.cancelBubb ...