The basics of SMB PowerShell, a feature of Windows Server 2012 and SMB 3.0
1. Overview
1.1. Introduction
Windows Server 2012 provides Windows PowerShell cmdlets and WMI objects to manage SMB File Servers and SMB File Shares.
These new tools are aimed at both System Administrator and Developers.
1.2. Benefits
SMB PowerShell cmdlets allow an IT Administrator to
- Use the PowerShell command line to manage and monitor File Servers and File Shares.
- Write scripts that automate common File Server administrative tasks, providing consistent automation.
- Leverage existing PowerShell skills.
- Integrate with related PowerShell-managed components (network, block storage, cluster).
WMI objects allow a Developer to
- Use a simpler API to manage and monitor File Servers and File Shares
- Leverage existing skills to use WMI classes for management
- Integrate with related WMI-managed components (network, block storage, cluster).
- Allow for consistent automation of file-server related processes and policies, including change control.
These cmdlets and objects were designed with the following goals in mind:
- Administrator-friendly: Consistent set of cmdlets which supersedes the existing NET.EXE tool.
- Scripting-friendly: Integrates with other PowerShell-managed components.
- Cluster-aware: Manage both standalone and clustered file servers.
- Developer-friendly: Enable developers, superseding the related Win32 Net APIs.
- GUI-friendly: Predictable response time, to allow use by a GUI like Server Manager.
- Remotable: Able to manage a remote File Server by specifying its name.
- Properties-aware: Allows getting and setting SMB share properties.
- Settings-aware: Allows getting and setting SMB server and SMB client configuration settings.
- Network Interface-aware: Expose information on the network interfaces used the SMB Client and Server, as well as their interactions with SMB Multichannel.
1.3. Requirements
You do not need to install any roles or features in order use the SMB PowerShell and WMI objects in Windows Server 2012.
Certain parameters and settings might be restricted to specific configurations, like the ones related to File Server clusters.
1.4. Supported Configurations
SMB PowerShell and WMI objects are supported in all configurations in Windows Server 2012.
Certain parameters and settings might be restricted to specific configurations, like the ones related to File Server clusters.
2. Configuration
2.1. Installing
The SMB PowerShell cmdlets and WMI objects are available by default in Windows Server 2012.
There is no need to install components, roles, role services or features.
The SMB cmdlets are packaged into two modules called SmbShare and SmbWitness.
These modules are automatically loaded whenever you refer to any of the cmdlets included. No upfront configuration is required.
Optionally, you can load these modules manually using the following PowerShell cmdlet:
Import-Module Smb*
2.2. Enumerating cmdlets
You can list all cmdlets in the SMB PowerShell modules using the Get-Command cmdlets.
For instance, to get a list of cmdlets in the SMB modules sorted by Noun and Verb, use the following cmdlets:
Get-Command –Module Smb* | Sort Noun, Verb
Here’s the list of SMB-related objects (nouns) and methods (verbs) available in Windows Server 2012 Beta:
- SMB Share: Get, New, Set, Remove
- SMB Share Access: Get, Grant, Revoke, Block, Unblock
- SMB Configuration: Get, Set for Server, Client
- SMB Session: Get, Close
- SMB Open File: Get, Close
- SMB Mapping: Get, New, Remove
- SMB Connection: Get
- SMB Network Interface: Get for Server, Client
- SMB Multichannel Connection: Get, Update
- SMB Multichannel Connection: New, Get, Remove
- SMB Witness Client: Get, Move
2.3. Getting help for a cmdlet
You can obtain information about any PowerShell cmdlet (including a list of parameters) by using the Get-Help cmdlet. For example, to get help for the Get-SmbShare cmdlet, use the following PowerShell cmdlet:
Get-Help Get-SmbShare
2.4. Uninstalling
The SMB PowerShell cmdlets and WMI objects are available by default in Windows Server 2012. There is no need to uninstall components, roles, role services or features.
3. SMB PowerShell cmdlets
Here are the SMB PowerShell cmdlets, grouped by area, each with a simple description and a sample command line.
3.1. SMB Shares
These cmdlets let you manage SMB shares, including creating new ones, setting their properties and removing them.
Get a list of existing file shares
Get-SmbShare
Get-SmbShare FS*Create new file share
New-SmbShare –Name ShareName –Path C:LocalFolder
Change the configuration of an existing file share
Set-SmbShare –Name ShareName –Description “This is a test share”
Remove a file share
Remove-SmbShare –Name ShareName
3.2. SMB Share Access
These cmdlets let you manage permissions (access control lists) for SMB shares. You can grant and revoke permissions (full, change or read) to specific accounts, as well as block and unblock access by a specific account.
Get a list of permissions for a file share
Get-SmbShareAccess –Name ShareName
Add permissions for a user, computer or group when creating the file share
New-SmbShare –Name ShareName –Path C:LocalFolder –FullAccess Username
Grant permissions for a user, computer or group after the file share is already created
Grant-SmbShareAccess –Name Share –AccountName User –AccessRight Full
Revoke permissions for a user, computer or group
Revoke-SmbShareAccess –Name ShareName –AccountName Username
Block a specific user, computer or group from a file share
Block-SmbShareAccess –Name ShareName –AccountName Username
Unblock a specific user, computer or group from a file share
Unblock-SmbShareAccess –Name ShareName –AccountName Username
Use the share permissions to configure the NTFS permissions on the folder behind the share
(Get-SmbShare -Name ShareName).PresetPathAcl | Set-Acl
3.3. Sessions and Open Files
These cmdlets let you manage currently open sessions and files on an SMB server, including listing and forcibly closing them.
Get a list of SMB Server sessions
Get-SmbSession
Close a specific SMB Server session by session ID (use the ID as listed by Get-SmbSession)
Close-SmbSession -SessionId 4469316125633
Close a specific SMB Server session by computer (use the name as listed by Get-SmbSession)
Close-SmbSession –ClientComputerName \192.168.101.10
Close a specific SMB Server session by user name (use the name as listed by Get-SmbSession)
Close-SmbSession –ClientUserName DomainUsername
Get a list of currently open files in the SMB Server
Get-SmbOpenFile
Get a list of currently open files by a specific user in the SMB Server
Get-SmbOpenFile –ClientUserName DomainUsername
Close a specific SMB open file by file ID (use the ID as listed by Get-SmbOpenFile)
Close-SmbOpenFile –FileID 8885213595225
Close a specific SMB open file by user name (use the name as listed by Get-SmbOpenFile)
Close-SmbOpenFile –ClientUserName DomainUsername
3.4. Client Connections and Mappings
These cmdlets let you view current connections and manage drive mappings on an SMB client.
View a list of the SMB connections currently used by an SMB client
Get-SmbConnection
View a list of drives mapped by an SMB client
Get-SmbMapping
To map a new driver to a remote file share
New-SmbMapping -LocalPath X: -RemotePath \FileServerShare
To remove an existing mapping
Remove-SmbMapping -LocalPath Y:
3.5. Network interfaces
These cmdlets let you view the network interface configuration used by SMB Multichannel on an SMB client or SMB server. They also manage current SMB Multichannel connections on the SMB client.
List the network interfaces available to the SMB server, along with its capabilities
Get-SmbServerNetworkInterface
List the network interfaces available to the SMB client, along with its capabilities
Get-SmbClientNetworkInterface
List the connections currently in use by SMB Multichannel
Get-SmbMultichannelConnection
List the connections currently in use by SMB Multichannel to talk to a specific server (use the name as listed by Get-SmbMultichannelConnection without any parameters)
Get-SmbMultichannelConnection -ServerName ServerName
Force SMB Multichannel to immediately recalculate its policy and react to potential changes in network topology
Update-SmbMultichannelConnection
Force SMB Multichannel to immediately recalculate its policy for a specific server and react to potential changes in network topology (use the name as listed by Get-SmbMultichannelConnection without any parameters)
Update-SmbMultichannelConnection -ServerName ServerName
Create an SMB Multichannel constraint, which restricts the NICs that SMB Multichannel is allowed to use, by interface ID. This is configured per server
New-SmbMultichannelConstraint -ServerName ServerName -InterfaceId 11, 12
Create an SMB Multichannel constraint, which restricts the NICs that SMB Multichannel is allowed to use, by interface ID. This is configured per server
New-SmbMultichannelConstraint -ServerName ServerName -InterfaceAlias RDMA1, RDMA2
List the currently configured SMB Multichannel constraints for all servers
Get-SmbMultichannelConstraint
List the currently configured SMB Multichannel constraints for a specific server
Get-SmbMultichannelConstraint -ServerName ServerName
Remove SMB Multichannel constraints for a given server
Remove-SmbMultichannelConstraint -ServerName ServerName
Remove all configured SMB Multichannel constraints
Get-SmbMultichannelConstraint | Remove-SmbMultichannelConstraint
3.6. Client and Server Configuration
These cmdlets let you view and change configuration parameters for the SMB server and SMB client.
View the current SMB client configuration settings
Get-SmbClientConfiguration
To change an SMB client configuration setting, like SMB Signing
Set-SmbClientConfiguration -RequireSecuritySignature $true
View the current SMB server configuration settings
Get-SmbServerConfiguration
To change an SMB server configuration setting, like SMB Signing
Set-SmbServerConfiguration -RequireSecuritySignature $true
3.7. Witness
These cmdlets let you view the SMB Witness connections in an SMB Scale-Out configuration. You can also move clients to a different server in the cluster.
Lists the SMB Witness clients currently connecting to the SMB Server
Get-SmbWitnessClient
Move an SMB client in a Scale-Out File Server to another File Server cluster node
Move-SmbWitnessClient -ClientName ClientX -DestinationNode ServerY
4. Troubleshooting
Here are troubleshooting tips for SMB PowerShell.
4.1. Access is denied
Many SMB PowerShell cmdlets require administrator permissions.
Make sure you are logged on as a user with Administrative permissions.
Also make sure you’re running an elevated PowerShell prompt (use the option to “Run as Administrator” when launching PowerShell).
4.2. Cmdlet help is brief and offers no details
During the beta phase, there is limited cmdlet help. While at least a list of parameters is provided, other details may be missing.
Updated help information will be published to the Internet.
You can update the help text for your SMB PowerShell cmdlets using the following PowerShell cmdlet:
Update-Help Smb*
4.3. Failed to Update Help
During the beta phase, it’s possible you get an error saying “Failed to update Help for the module” while running the Update-Help cmdlets.
Here are a few common reasons:
- You’re having problems with your Internet connection. Verify your Internet connection and try again.
- The help for the module is not yet available on the Internet. The help will become available by the time Windows Server 2012 is finalized.
4.4. Running cmdlets against a remote file server
SMB PowerShell supports running cmdlets against a remote file server.
You simply have to add the parameter CimSession to your cmdlet.
For instance, to remove the Share1 SMB share on server “FS1” from another server, use the following cmdlet:
Remove-SmbShare –CimSession FS1 –Name Share1
5. Comparing with older technologies
5.1. SMB PowerShell and the NET.EXE tool
For IT Administrators, the new SMB PowerShell supersedes the older NET.EXE tools for all share-related operations.
Here’s a table that compares the old NET.EXE command lines with the new PowerShell cmdlets:
NET.EXE command Equivalent SMB PowerShell NET SHARE Get-SmbShare New-SmbShare Set-SmbShare Remove-SmbShare NET FILE Get-SmbOpenFile Close-SmbOpenFile NET SESSION Get-SmbSession Close-SmbSession NET USE Get-SmbMapping New-SmbMapping Remove-SmbMapping NET CONFIG Get-SmbServerConfiguration Set-SmbServerConfiguration Get-SmbClientConfiguration Set-SmbClientConfiguration
5.2. SMB WMI classes and the older NET APIs
For Developers, the new SMB WMI supersedes the older Win32 NET API.
Here’s a table that compares the old NET API and the SMB WMI classes:
Net API call SMB PowerShell NetShareEnum NetShareGetInfo Get-SmbShare NetShareSetInfo Set-SmbShare NetShareAdd New-SmbShare NetShareDel NetShareDelEx Remove-SmbShare NetFileEnum NetFileGetInfo Get-SmbOpenFile NetFileClose Close-SmbOpenFile NetSessionEnum NetSessionGetInfo Get-SmbSession NetSessionDel Close-SmbSession
6. Additional SMB PowerShell samples
You can find additional examples of SMB PowerShell cmdlets in the following blog posts:
- Test Hyper-V over SMB configuration with Windows Server 2012 - Step-by-step Installation using PowerShell
- Windows Server 2012 Scale-Out File Server for SQL Server 2012 - Step-by-step Installation
- Windows Server 2012 Beta - Test cases for Hyper-V over SMB (includes PowerShell examples)
- Let’s Build a Cloud… With PowerShell! - Part 1: Deployment and Configuration
- Windows PowerShell Reference Sheet for File and Storage Services in Windows Server 2012 Beta
- The built-in SMB PowerShell aliases in Windows Server 2012 and Windows 8
7. Conclusion
I hope this blog post has helped you understand the basics of SMB PowerShell. I would encourage you to try the new cmdlets with the Windows 8 Consumer Preview and the Windows Server 2012 Beta.
For additional information on the Windows Server 2012 File Server, SMB 3.0 and SMB PowerShell, see the links at Updated Links on Windows Server 2012 File Server and SMB 3.0.
Update on 06/27: Included new cmdlets in Windows Server 2012 RC
Update on 08/30: Added links to two step-by-step posts and the blog about SMB PowerShell aliases
Comments
- Anonymous
April 20, 2016
Awesome post!I am using PowerShell to determine what version of SMB is in play on my Windows 2012 server, but no data is returned when I submit "Get -SmbConnection". Any thoughts on what I may be doing wrong?- Anonymous
April 22, 2016
The comment has been removed
- Anonymous
- Anonymous
February 05, 2017
A most useful blog post. From what I can tell, the details here are correct for Server 2016 RTM. - Anonymous
May 19, 2017
How can I use the gsmbsc command to a list of servers to determine if smbv1 is enabled? - Anonymous
October 27, 2017
Very helpful