I find myself having to create and use the same Lync Powershell scripts over and over again, so I thought I'd compile a list of some of the ones I've created for others. It will get updated as time goes on.
Enjoy, and suggest others in the Comments.
Finding all the people who have a telephone number set in Lync
Get-CsUser -Filter {LineURI -ne $NULL} | FT Name, LineURI
Change SIP domain for all users
$UserList = Get-CsUser
foreach ($User in $UserList)
{
$oldAddress = $User.SipAddress
$newAddress = $oldAddress -replace "@olddomain.com", "@newdomain.com"
Set-CsUser -Identity $User.Identity -SipAddress $newAddress
}
Setting the AD office phone number to the TelURI for all users
#Only need to add the AD Powershell instance once
Add-WindowsFeature RSAT-AD-Powershell
Import-Module ActiveDirectory
$users = Get-CSUser
Foreach ($user in $users)
{
$Tel = $user.LineURI
$Tel = $Tel.Replace("tel:", "")
If ($Tel -ne "")
{
Set-ADUser -Identity $user.SAMAccountName -OfficePhone $Tel
}
}
Enable All Users in a Group for Lync Enterprise Voice
#Uses existing office number in AD for Enterprise Voice
Import-Module ActiveDirectory
$Users = Get-ADGroupMember lync_group
ForEach ($User in $Users)
{
Enable-CsUser $User.SamAccountName -RegistrarPool
LYNCPOOLNAME -SipAddressType EmailAddress
$OfficePhone = (Get-CSADUser $User.SamAccountName).Phone
$OfficePhone = $OfficePhone -replace "\D", ""
Set-CSUser $User.SamAccountName -EnterpriseVoiceEnabled:$TRUE -LineURI "tel:+$OfficePhone"
}
Move All OCS Users Homed on a Specific Pool to Lync
Also sets conferencing policy and external access policy to automatic, rather than the legacy migrated OCS policies. Replace items in bold with your environmental specifics.
get-csuser -OnOfficeCommunicationServer | Where {$_.HomeServer -eq "CN=LC Services,CN=Microsoft,CN=
OCSPOOLNAME,CN=Pools,CN=RTC Service,CN=Services,CN=Configuration,DC=
contoso,DC=
com"} | Move-CsLegacyUser -Target
LYNCPOOLFQDN -ExcludeConferencingPolicy -ExcludeExternalAccessPolicy -Confirm:$FALSE
Count How Many Users are on OCS and Lync
(Get-CsUser -OnOfficeCommunicationServer).Count
(Get-CsUser -OnLyncServer).Count
Get a List of All Lync-Enabled Users Along with Selected AD Properties
#Asked by a commenter. Harder than it initially looked....
$ErrorActionPreference = 'SilentlyContinue'
Import-Module ActiveDirectory
$Output = @()
Foreach ($LyncUser in Get-CSUser -ResultSize Unlimited)
{
$ADUser = Get-ADUser -Identity $LyncUser.SAMAccountName -Properties Department, Title, Mail
$Output += New-Object PSObject -Property @{DisplayName=$LyncUser.DisplayName; Department=$ADUser.Department; Title=$ADUser.Title; SAMAccountName=$ADUser.sAMAccountName; Mail=$ADUser.Mail; SIPAddress=$LyncUser.SIPAddress; LineURI=$LyncUser.LineURI; EVEnabled=$LyncUser.EnterpriseVoiceEnabled}
}
$Output | Export-CSV -Path .\Output.csv
$Output | FT DisplayName, Title, Department, SAMAccountName, Mail, SIPAddress, EVEnabled
Create Lync Network Sites and Subnets using Info from AD Sites & Services
http://ucken.blogspot.ca/2013/04/automatically-creating-lync-sites-and.html
Add Enterprise Voice Users to an AD Group
Foreach ($User in get-csuser -filter {EnterpriseVoiceEnabled -eq $TRUE})
{Add-ADGroupMember -Identity
-Members $User.SamAccountName}
Enable All Users in an AD Group for Lync EV/Exchange UM
#Takes the office number from AD, assuming its formatted correctly, extracts the last 4 digits to use
#as the extension (for dialin conferencing), and uses it for the LineURI and extension for UM.
Import-Module ActiveDirectory
#Import Exchange Powershell
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://
EXCHANGESERVERFQDN/PowerShell/ -Authentication Kerberos
Import-PSSession $Session
$Users = Get-ADGroupMember
TARGETADGROUP
ForEach ($User in $Users)
{
Enable-CsUser $User.SamAccountName -RegistrarPool
LYNCSERVERFQDN -SipAddressType EmailAddress
$EmailAddress = Get-CSADUser $User.SamAccountName).WindowsEmailAddress
$OfficePhone = (Get-CSADUser $User.SamAccountName).Phone
$OfficeExt = $OfficePhone.Substring($OfficePhone.Length - 4)
$OfficePhone = $OfficePhone -replace "\D", ""
$OfficePhone = $OfficePhone + ";ext=" + $OfficeExt
Set-CSUser $User.SamAccountName -LineURI "tel:+$OfficePhone"
Set-CSUser $User.SamAccountName -EnterpriseVoiceEnabled:$TRUE
Enable-UMMailbox $User.SamAccountName -UMMailboxPolicy "
UMPOLICYNAME" -SIPResourceIdentifier $EmailAddress -Extension $OfficeExt
}
List All Remote PowerShell Sessions On A Machine
Get-WSManInstance -ComputerName
COMPUTERNAME -ResourceURI Shell -Enumerate | FT Owner, ClientIP, State