Summary
This blog explores the evolution of Pure Storage PowerShell tools, from the CLI cmdlet in SDK 1.7.4.0 to the advanced FlashBlade PowerShell Toolkit and SDK 2.x, empowering administrators with modern, efficient storage management and automation capabilities.
In the latest release of the PowerShell SDK (1.7.4.0) we included a new cmdlet for sending CLI commands to the FlashArray. We added this cmdlet in case any new REST APIs had not been integrated into the PowerShell SDK and customers/partners wanted to access a direct CLI command. You can pass a CLI command and we establish the SSH session, execute the command and then return the results as a PSObject.
Updated Tools and Features for Managing FlashBlade with PowerShell
As technology evolves, so do the tools for managing Pure Storage systems, including FlashBlade. Since the original publication of this blog, new developments in the Pure Storage PowerShell SDK and the introduction of the FlashBlade PowerShell Toolkit have enhanced the capabilities available to administrators. Below, we outline the latest tools and features you need for efficient FlashBlade management using PowerShell in 2025.
1. Pure Storage FlashBlade PowerShell Toolkit
The FlashBlade PowerShell Toolkit, available on GitHub, is a purpose-built module for interacting with FlashBlade systems. It leverages FlashBlade’s REST API to provide a wide range of cmdlets for streamlined array management. Key benefits include:
- Direct API Integration: Simplifies operations with cmdlets explicitly designed for FlashBlade.
- Expanded Functionality: Supports tasks such as volume management, object storage operations, and replication configuration.
- Cross-Platform Support: Compatible with Windows, Linux, and macOS via PowerShell Core.
Example Usage:
To retrieve a list of file systems from your FlashBlade array:
1 2 3 4 5 6 7 8 |
powershellCopyEdit<code>Import–Module FlashBladeToolkit # Connect to the FlashBlade array $Session = Connect–FlashBlade –Endpoint “https://<Your-FlashBlade-IP>” –APIToken “<Your-API-Token>” # Retrieve file systems Get–FlashBladeFileSystems –Session $Session |
2. Pure Storage PowerShell SDK 2.x
The latest version of the PowerShell SDK for FlashArray and FlashBlade introduces modernized features and broader compatibility:
- OAuth Authentication: Enhanced security for connecting to storage arrays.
- PowerShell Pipeline Support: Enables chaining cmdlets for more intuitive scripting.
- Cross-Platform Support: Works with PowerShell 7+, ensuring compatibility with modern environments.
- Improved Performance: Optimized for the latest Pure Storage firmware and APIs.
Example Usage:
Using the updated SDK to monitor storage performance:
1 2 3 4 5 6 7 8 |
powershellCopyEdit<code>Import–Module PureStoragePowerShellSDK # Connect to the array $Session = Connect–PfaController –FlashArray “Your-FlashArray-Name” –APIToken “<Your-API-Token>” # Retrieve performance metrics Get–PfaPerformance –Session $Session |
3. Additional Enhancements
- Automation and Orchestration: Leverage PowerShell in combination with tools like Ansible, Terraform, or CI/CD pipelines for end-to-end automation of FlashBlade deployments and configurations.
- NVMe-over-Fabrics Support: Explore integration with NVMe-oF for advanced storage performance and efficiency.
Recommendations for Administrators
- Upgrade Your Tools: Ensure you are using the latest version of the FlashBlade PowerShell Toolkit or the Pure Storage PowerShell SDK to access new features and maintain compatibility with modern infrastructure.
- Integrate with Modern Systems: Consider using these tools alongside modern DevOps practices to streamline operations and reduce administrative overhead.
- Explore Documentation: Visit Pure Storage’s GitHub repository and official resources for the most current modules, scripts, and usage examples.
By incorporating these tools and practices, you can future-proof your FlashBlade management workflows while maximizing the efficiency and performance of your storage infrastructure.
Example
1 |
<span class=“s2”>New–PfaCLICommand</span> –EndPoint <span class=“s4”>10.1.1.1</span> –Credentials <span class=“s5”>$creds</span> –CommandText <span class=“s6”>“purevol list” </span> |
Output
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
PS C:Windowssystem32> New–PfaCLICommand –EndPoint 10.1.1.1 –Credentials $creds –CommandText “purevol list” Name <span class=“Apple-converted-space”> </span>Size<span class=“Apple-converted-space”> </span>Source<span class=“Apple-converted-space”> </span>Created<span class=“Apple-converted-space”> </span>Serial <span class=“Apple-converted-space”> </span>boneyard3<span class=“Apple-converted-space”> </span>6T<span class=“Apple-converted-space”> </span>– <span class=“Apple-converted-space”> </span>2016–12–21 16:35:39 PST<span class=“Apple-converted-space”> </span>45084F3508BF46140001192C CSV–Cluster01<span class=“Apple-converted-space”> </span>5T<span class=“Apple-converted-space”> </span>– <span class=“Apple-converted-space”> </span>2016–11–12 07:02:45 PST<span class=“Apple-converted-space”> </span>45084F3508BF461400011671 PSRepository <span class=“Apple-converted-space”> </span>250G<span class=“Apple-converted-space”> </span>– <span class=“Apple-converted-space”> </span>2016–11–02 09:21:05 PDT<span class=“Apple-converted-space”> </span>45084F3508BF4614000111A7 SCVMM–Library01<span class=“Apple-converted-space”> </span>2T<span class=“Apple-converted-space”> </span>– <span class=“Apple-converted-space”> </span>2016–10–25 13:54:22 PDT<span class=“Apple-converted-space”> </span>45084F3508BF461400011036 Server01–Vol01 <span class=“Apple-converted-space”> </span>250G<span class=“Apple-converted-space”> </span>– <span class=“Apple-converted-space”> </span>2016–12–21 16:37:49 PST<span class=“Apple-converted-space”> </span>45084F3508BF46140001192D Server01–Vol02 <span class=“Apple-converted-space”> </span>250G<span class=“Apple-converted-space”> </span>– <span class=“Apple-converted-space”> </span>2017–02–06 13:38:44 PST<span class=“Apple-converted-space”> </span>45084F3508BF461400011934 Server02–Vol01 <span class=“Apple-converted-space”> </span>250G<span class=“Apple-converted-space”> </span>– <span class=“Apple-converted-space”> </span>2016–11–12 07:23:05 PST<span class=“Apple-converted-space”> </span>45084F3508BF461400011672 Server03–Vol01 <span class=“Apple-converted-space”> </span>250G<span class=“Apple-converted-space”> </span>– <span class=“Apple-converted-space”> </span>2016–12–21 16:38:03 PST<span class=“Apple-converted-space”> </span>45084F3508BF46140001192E Server04–Vol01 <span class=“Apple-converted-space”> </span>250G<span class=“Apple-converted-space”> </span>– <span class=“Apple-converted-space”> </span>2016–12–21 16:38:17 PST<span class=“Apple-converted-space”> </span>45084F3508BF46140001192F Server05–Vol01 <span class=“Apple-converted-space”> </span>250G<span class=“Apple-converted-space”> </span>– <span class=“Apple-converted-space”> </span>2016–12–21 16:38:26 PST<span class=“Apple-converted-space”> </span>45084F3508BF461400011930 Server06–Vol01 <span class=“Apple-converted-space”> </span>250G<span class=“Apple-converted-space”> </span>– <span class=“Apple-converted-space”> </span>2016–11–12 07:23:16 PST<span class=“Apple-converted-space”> </span>45084F3508BF461400011673 Server07–Vol01 <span class=“Apple-converted-space”> </span>250G<span class=“Apple-converted-space”> </span>– <span class=“Apple-converted-space”> </span>2016–12–21 16:38:34 PST<span class=“Apple-converted-space”> </span>45084F3508BF461400011931 Server08–Vol01 <span class=“Apple-converted-space”> </span>250G<span class=“Apple-converted-space”> </span>– <span class=“Apple-converted-space”> </span>2016–12–21 16:38:42 PST<span class=“Apple-converted-space”> </span>45084F3508BF461400011932 |
Now for the cool “side effect” you can use the very same cmdlet to access a FlashBlade! Below is a simple example of querying information from the FlashBlade.
For Previous Versions
Example1
1 2 |
<span class=“s2”>$creds</span> <span class=“s4”>=</span> Get–Credential <span class=“s5”>New–PfaCLICommand</span> –EndPoint <span class=“s6”>10.1.1.1</span> –Credentials <span class=“s2”>$creds</span> –CommandText <span class=“s7”>‘pureblade list’</span> |
Output Example1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Name<span class=“Apple-converted-space”> </span>Status <span class=“Apple-converted-space”> </span>Capacity<span class=“Apple-converted-space”> </span>Details CH1.FB1 <span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB2 <span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB3 <span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB4 <span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB5 <span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB6 <span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB7 <span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB8 <span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB9 <span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB10<span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB11<span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB12<span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB13<span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB14<span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– CH1.FB15<span class=“Apple-converted-space”> </span>healthy<span class=“Apple-converted-space”> </span>8.00T <span class=“Apple-converted-space”> </span>– |
Example2
1 2 |
<span class=“s5”><figure><a href=“https://blog.purestorage.com/wp-content/uploads/2017/05/FB_Volumes_View-1.png”><img class=“alignnone size-full wp-image-13681” src=“https://blog.purestorage.com/wp-content/uploads/2017/05/FB_Volumes_View-1.png” alt=“” width=“1440” height=“811”></a></figure> </span> |
1 2 3 |
<span class=“s2”>$creds</span> <span class=“s4”>=</span> Get–Credential<span class=“s5”> New–PfaCLICommand</span> –EndPoint <span class=“s6”>10.1.1.1</span> –Credentials <span class=“s2”>$creds</span> –CommandText <span class=“s7”>‘purefs list’ </span> |
Output Example2
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Name<span class=“Apple-converted-space”> </span>Size<span class=“Apple-converted-space”> </span>Used <span class=“Apple-converted-space”> </span>% Used<span class=“Apple-converted-space”> </span>Created<span class=“Apple-converted-space”> </span>Protocols<span class=“Apple-converted-space”> </span>Rules <span class=“Apple-converted-space”> </span>Fast Remove agfa01<span class=“Apple-converted-space”> </span>10T <span class=“Apple-converted-space”> </span>572.21G<span class=“Apple-converted-space”> </span>6%<span class=“Apple-converted-space”> </span>2017–03–31 18:22:19 PDT<span class=“Apple-converted-space”> </span>nfs<span class=“Apple-converted-space”> </span>*(rw,no_root_squash)<span class=“Apple-converted-space”> </span>True ArchLog <span class=“Apple-converted-space”> </span>10T <span class=“Apple-converted-space”> </span>23.03G <span class=“Apple-converted-space”> </span>0%<span class=“Apple-converted-space”> </span>2017–03–30 18:46:23 PDT<span class=“Apple-converted-space”> </span>nfs<span class=“Apple-converted-space”> </span>*(rw,no_root_squash)<span class=“Apple-converted-space”> </span>False cv_ddb01<span class=“Apple-converted-space”> </span>2T<span class=“Apple-converted-space”> </span>0.00 <span class=“Apple-converted-space”> </span>0%<span class=“Apple-converted-space”> </span>2017–03–23 10:38:11 PDT<span class=“Apple-converted-space”> </span>nfs<span class=“Apple-converted-space”> </span>*(rw,no_root_squash)<span class=“Apple-converted-space”> </span>True cv_media01<span class=“Apple-converted-space”> </span>25T <span class=“Apple-converted-space”> </span>5.27T<span class=“Apple-converted-space”> </span>21% <span class=“Apple-converted-space”> </span>2017–03–23 10:36:38 PDT<span class=“Apple-converted-space”> </span>nfs<span class=“Apple-converted-space”> </span>*(rw,no_root_squash)<span class=“Apple-converted-space”> </span>True cv_media02<span class=“Apple-converted-space”> </span>25T <span class=“Apple-converted-space”> </span>3.12T<span class=“Apple-converted-space”> </span>12% <span class=“Apple-converted-space”> </span>2017–03–23 10:37:01 PDT<span class=“Apple-converted-space”> </span>nfs<span class=“Apple-converted-space”> </span>*(rw,no_root_squash)<span class=“Apple-converted-space”> </span>True cv_media03<span class=“Apple-converted-space”> </span>20T <span class=“Apple-converted-space”> </span>1.07T<span class=“Apple-converted-space”> </span>5%<span class=“Apple-converted-space”> </span>2017–04–24 15:43:48 PDT<span class=“Apple-converted-space”> </span>nfs<span class=“Apple-converted-space”> </span>*(rw,no_root_squash)<span class=“Apple-converted-space”> </span>False cv_media04<span class=“Apple-converted-space”> </span>20T <span class=“Apple-converted-space”> </span>1.00T<span class=“Apple-converted-space”> </span>5%<span class=“Apple-converted-space”> </span>2017–04–24 15:43:58 PDT<span class=“Apple-converted-space”> </span>nfs<span class=“Apple-converted-space”> </span>*(rw,no_root_squash)<span class=“Apple-converted-space”> </span>False data01<span class=“Apple-converted-space”> </span>10G <span class=“Apple-converted-space”> </span>4.00G<span class=“Apple-converted-space”> </span>40% <span class=“Apple-converted-space”> </span>2017–02–28 15:09:46 PST<span class=“Apple-converted-space”> </span>nfs<span class=“Apple-converted-space”> </span>*(rw,no_root_squash)<span class=“Apple-converted-space”> </span>False DataVol01 <span class=“Apple-converted-space”> </span>10T <span class=“Apple-converted-space”> </span>5.75T<span class=“Apple-converted-space”> </span>56% <span class=“Apple-converted-space”> </span>2017–01–22 20:39:06 PST<span class=“Apple-converted-space”> </span>nfs<span class=“Apple-converted-space”> </span>*(rw,no_root_squash)<span class=“Apple-converted-space”> </span>False DataVol02 <span class=“Apple-converted-space”> </span>10T <span class=“Apple-converted-space”> </span>5.75T<span class=“Apple-converted-space”> </span>56% <span class=“Apple-converted-space”> </span>2017–01–22 21:30:29 PST<span class=“Apple-converted-space”> </span>nfs<span class=“Apple-converted-space”> </span>*(rw,no_root_squash)<span class=“Apple-converted-space”> </span>False DataVol03 <span class=“Apple-converted-space”> </span>10T <span class=“Apple-converted-space”> </span>5.75T<span class=“Apple-converted-space”> </span>56% <span class=“Apple-converted-space”> </span>2017–01–22 21:30:49 PST<span class=“Apple-converted-space”> </span>nfs<span class=“Apple-converted-space”> </span>*(rw,no_root_squash)<span class=“Apple-converted-space”> </span>False DataVol04 <span class=“Apple-converted-space”> </span>10T <span class=“Apple-converted-space”> </span>5.75T<span class=“Apple-converted-space”> </span>56% <span class=“Apple-converted-space”> </span>2017–01–22 21:31:35 PST<span class=“Apple-converted-space”> </span>nfs<span class=“Apple-converted-space”> </span>*(rw,no_root_squash)<span class=“Apple-converted-space”> </span>False |
Hopefully this opens us some automation scenarios for those FlashBlade customers.
Conclusion
While this initial cmdlet provided flexibility for accessing commands not yet integrated into the REST API, advancements in PowerShell SDKs and the release of the FlashBlade PowerShell Toolkit have significantly expanded the capabilities for managing Pure Storage systems in 2025.
Administrators now have access to dedicated tools like the FlashBlade PowerShell Toolkit, offering purpose-built cmdlets for streamlined FlashBlade operations, and the PowerShell SDK 2.x, which supports modern authentication methods, cross-platform functionality, and enhanced performance. These advancements, combined with modern DevOps tools and methodologies, provide a robust framework for automating and managing Pure Storage environments efficiently.
Whether you’re maintaining legacy systems or deploying cutting-edge infrastructure, adopting the latest PowerShell tools and practices ensures compatibility, security, and scalability. As you integrate these solutions, you’ll unlock new possibilities for performance optimization and simplified management, future-proofing your storage workflows for years to come.