Remover permissão de pasta pública usando powershell


Um cliente pediu para remover a opção de criar sub-pastas de dentro das pastas públicas do Exchange 2010.

Ele possui +/- 6.500 usuários de AD (com contas de exchange) e um pouco mais de 9.000 pastas dentro das pastas públicas… cada sub-pasta tem uns 4 usuários diferentes…

Bom,,, dá pra fazer o trabalho pelo ECM ? claro… imagina quanto tempo o pessoal ia gastar removendo permissão 1 a 1,,, pasta a pasta,,, O pessoal pensou,,, e chegaram a conclusão de que 2 pessoas, 5 dias, 8 horas /dia, iriam conseguir terminar em +/- 6 semanas. Isso é meio que jogar tempo fora certo? levemente uma loucura? Então… o pessoal começou a fazer 1 a 1…

Depois de uns 3 dias de trabalho um deles perguntou se existia uma forma mais rápida de fazer esse trabalho,, e claro,, existe…

demorei 30 min montando o powershell abaixo,


$AllPublicFolders = Get-publicFolder '\Public Folder Base' -recurse #trocar aqui para a public folder que será a raiz da mudança
foreach($Pf in $AllPublicFolders ){
Get-PublicFolderClientPermission $Pf | Foreach{ Remove-PublicFolderClientPermission $_.Identity -User $_.User -AccessRights CreateSubfolders -Confirm:$False -erroraction 'silentlycontinue' }
}
# como existem usuários que vc nao pode trocar a permissao ele apresenta erro

# o comando de remove pede confirmacao para cada vez que e executado o -confirm:$false anula essa confirmacao


Basicamente o que ele faz:

  • Acessa uma public folder especifica e todas as sub-folders colocando em uma variável
  • para cada public folder  ele pega os usuários que tem permissão dentro dela e remove o direito de criar sub-folder
  • Não exibe mensagens de erro
  • suprime a necessidade de pressionar Y para cada remoção

O resultado foi bem legal… de +/- 6 semanas resolvemos tudo em +/- 3 horas.

Tocador de MP3 usando powershell


Agora no final da tarde tive uma ideia,,, será que da pra montar um tocador de mp3 usando powershell ??

a resposta:


$mediaPlayer = New-Object system.windows.media.mediaplayer
$path = "L:\arquivos\musicas" #nao esqueca de trocar aqui o caminho do diretorio das suas musicas
$files = Get-ChildItem -path $path -include *.mp3 -recurse

foreach($file in $files)
{
 "Tocando $($file.BaseName)"
 $mediaPlayer.open([uri]"$($file.fullname)")
 $mediaPlayer.Play()
 Start-Sleep -Seconds 30 #tem que especificar um tempo para ele tocar, estou tentando melhorar esta parte
 $mediaPlayer.Stop()
}

não é perfeito,, ainda estou trabalhando no fato de ter que colocar o tempo manualmente de espera… estou vendo se no objeto mediaplayer ele tem como contar o tempo total da musica e adicionar como sleep.. se conseguir eu atualizo o código…

Passado um tempo…. peguei esse código para uma revisitada… agora ele consegue tocar a música por completo,,,


Add-Type -AssemblyName PresentationCore
$_MediaPlayer = New-Object System.Windows.Media.MediaPlayer
$_Diretorio = 'C:\Users\Public\Music\Sample Music' #Nao esqueca de trocar este caminho
$_Arquivos = Get-ChildItem -path $_Diretorio -include *.mp3 -recurse
$duracao = $null
foreach($_arquivo in $_Arquivos){
"Tocando $($_arquivo.BaseName)"
[uri]$_musica = $_arquivo.FullName
do {
$_MediaPlayer.Open($_musica)
$_musicaDuracao = $_MediaPlayer.NaturalDuration.TimeSpan.TotalMilliseconds
}
until ($_musicaDuracao)
$_MediaPlayer.Volume = 1
$_MediaPlayer.Play()
Start-Sleep -Milliseconds $_musicaDuracao
$_MediaPlayer.Stop() #caso você pare o powershell e continue tocando execute estas 2 últimas linhas
$_MediaPlayer.Close() # selecione-as e pressione F8
}