Retrieving Isilon Share Information with RESTful API and PowerShell
Introduction
In an earlier post we covered using RESTful API calls to EMC Isilon to retrieve quota data. In this post we will make the same calls but gather data on SMB / CIFS Shares for screen output as well and optional CSV output. We will also look at the options to gather for different zones as well.
Prerequisites
To be able to execute RESTful API calls to Isilon you will need to create an account and add the appropriate roles. For GET operations a read-only account is all that you will need. For this post we will create a local group and grant Platform API and SMB read-only roles.
The Code
So now lets get down to the meat of the post and the code we need to execute the RESTful API calls in PowerShell for Isilon.
<#
.SYNOPSIS
This script will Retrieve SMB Shares from Isilon using RestfulAPI.
.DESCRIPTION
This script will Retrieve SMB Shares from Isilon using RestfulAPI.
.NOTES
File Name : getisilonshares.ps1
Author : Me
Version : 1.0 (July 10, 2018 )
.OUTPUTS
Screen Output. can be modified to save to csv
.EXAMPLE
C:\PS> .\getisilonshares.ps1
#>
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
$username = 'root'
$password = 'passw0rd'
$EncodedAuthorization = [System.Text.Encoding]::UTF8.GetBytes($username + ':' + $password)
$EncodedPassword = [System.Convert]::ToBase64String($EncodedAuthorization)
$headers = @{"Authorization"="Basic $($EncodedPassword)"}
# create Uri
$baseurl = 'https://xxx.xxx.xxx.xxx:8080'
$resourceurl = "/platform/1/protocols/smb/shares?zone=System"
$uri = $baseurl + $resourceurl
# Get share information but output only name, path and description
$ISIObject = Invoke-RestMethod -Uri $uri -Method Get -Headers $headers
$ISIObject.shares | Select name,path,description
Let’s take a deeper look into the code example what it is doing. The first part of the script is setting the security to be able to connect to your Isilon array. This code is not original, I found this at code from blogs.msdn.com. Just copy and paste this section and change the username and password. This will work for any other RESTful API in PowerShell using Basic Authentication.
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
$username = 'root'
$password = 'passw0rd'
$EncodedAuthorization = [System.Text.Encoding]::UTF8.GetBytes($username + ':' + $password)
$EncodedPassword = [System.Convert]::ToBase64String($EncodedAuthorization)
$headers = @{"Authorization"="Basic $($EncodedPassword)"}
Next section of the code we will setup our URI (Uniform Resource Identifier). we will identify three variables called $baseurl, $resourceurl and $uri. The $baseurl is the https ip address of the Isilon node you want to run the query against. For the $resourceurl variable we will be using the /platform/1/protocols/smb/shares?zone=System resource path. Note: using this resource path will only display the system zone shares, by changing the resource path to /platform/1/protocols/smb/shares?zone=NewZone you can change to grab data from other zones on your Isilon. You can get a list of all available resource available from EMC RestfulAPI documentation for Isilon. The final $uri is the combining of the two previous variables.
# create Uri $baseurl = 'https://xxx.xxx.xxx.xxx:8080' $resourceurl = "/platform/1/protocols/smb/shares?zone=System" $uri = $baseurl + $resourceurl
Next section of the code we are going to create an object and make a Invoke-RestMethod cmdlet and GET action using security for authentication.
# Get share information but output only name, path and description $ISIObject = Invoke-RestMethod -Uri $uri -Method Get -Headers $headers
Now we are ready to get the output.
$ISIObject.shares | Select name,path,description
Sample script output
There are more fields available for output. By not adding the select statement we will get the full output available.
access_based_enumeration : False
access_based_enumeration_root_only : False
allow_delete_readonly : False
allow_execute_always : False
allow_variable_expansion : False
auto_create_directory : False
browsable : True
change_notify : norecurse
create_permissions : default acl
csc_policy : manual
description : Onbase SMB share
directory_create_mask : 448
directory_create_mode : 0
file_create_mask : 448
file_create_mode : 64
hide_dot_files : False
host_acl : {}
id : onbase
impersonate_guest : never
impersonate_user :
inheritable_path_acl : True
mangle_byte_start : 60672
mangle_map : {0x01-0x1F:-1, 0x22:-1, 0x2A:-1, 0x3A:-1...}
name : onbase
ntfs_acl_support : True
oplocks : True
path : /ifs/GAFRI/Onbase
permissions : {@{permission=full; permission_type=allow; trustee=}, @{permission=full; permission_type=allow; trustee=}, @{permission=full;
permission_type=allow; trustee=}, @{permission=full; permission_type=allow; trustee=}}
run_as_root : {}
strict_flush : True
strict_locking : False
zid : 2
From the available output we can add much more to the output. All you have to do is to add the fields to the select statement.
Conclusion
So we have explored making a basic Restful API call to Isilon to get specific SMB/CIFS export information. You can also change the output by exploring the different fields available from the output.





Hi, your scripts are excellent, I would need your help in geting NFS export view script other and system access zone to a text / CSV/ Excel / WordDoc file