VMware

This Question is Answered

1 "helpful" answer available (6 pts)
14 Replies Last post: Aug 6, 2008 2:54 AM by MorDrakka  

how to list files in datastores? posted: Jun 24, 2008 9:08 PM

Click to view benham's profile Novice 11 posts since
Feb 26, 2008

Hi,

Would like to find out how to list all the files and size in datastore? The objective is to help generate a spreadsheet for storage planning.

Anyone has a sample script?

Could not seem to get it working with get-datastore.

Re: how to list files in datastores?

1. Jun 25, 2008 1:21 AM in response to: benham
Click to view ykalchev's profile Hot Shot 68 posts since
Mar 5, 2008
Hi
You can use SearchDatastoreSubFolders of the HostDatastoreBrowser object to browse all files in the datastore

$ds = Get-Datastore <datastorename> | %{Get-View $_.Id}

$fileQueryFlags = New-Object VMware.Vim.FileQueryFlags
$fileQueryFlags.FileSize = $true
$fileQueryFlags.FileType = $true
$fileQueryFlags.Modification = $true

$searchSpec = New-Object VMware.Vim.HostDatastoreBrowserSearchSpec
$searchSpec.details = $fileQueryFlags
$searchSpec.sortFoldersFirst = $true

$dsBrowser = Get-View $ds.browser

$rootPath = "{0}" -f ($ds.summary.Name)
$searchResult = $dsBrowser.SearchDatastoreSubFolders($rootPath, $searchSpec)
foreach ($folder in $searchResult) {
foreach ($fileResult in $folder.File) {
$file = "" | select Name, Size, Modified, FullPath
$file.Name = $fileResult.Path
$file.Size = $fileResult.Filesize
$file.Modified = $fileResult.Modification
$file.FullPath = $folder.FolderPath + $file.Name
$file | out-default
}
}

You can also check query property of the SearchSpec object in order to filter files by type(i.e. only VmDisk or Vmconfig files)Regards,

Yasen

Re: how to list files in datastores?

3. Jun 25, 2008 1:18 AM in response to: benham
Click to view ykalchev's profile Hot Shot 68 posts since
Mar 5, 2008
It seems the code didn't show correct on IE. I've update the script code and I hope it's looking good now.

Yes It's VI Toolkit for Windows script

Re: how to list files in datastores?

5. Jun 25, 2008 3:58 AM in response to: benham
Click to view ykalchev's profile Hot Shot 68 posts since
Mar 5, 2008

I've just collect all files into a hashtable and then pipe then to export-cvs

$fileList = @{}
foreach ($folder in $searchResult) {
foreach ($fileResult in $folder.File) {
$file = "" | select Name, Size, Modified, FullPath
$file.Name = $fileResult.Path
$file.Size = $fileResult.Filesize
$file.Modified = $fileResult.Modification
$file.FullPath = $folder.FolderPath + $file.Name
fileList.Add($file.FullPath, $file)
}
}

$fileList.Values | select Name, Size, Modified, FullPath | export-csv "datastore.csv"

Regards,
Yasen

Re: how to list files in datastores?

6. Jun 25, 2008 6:50 AM in response to: benham
Click to view c_shanklin's profile Master 754 posts since
Dec 3, 2007
benham wrote:
Hi,

Would like to find out how to list all the files and size in datastore? The objective is to help generate a spreadsheet for storage planning.

Anyone has a sample script?

Could not seem to get it working with get-datastore.
Another alternative if you're feeling a bit adventurous would be to use the community extensions. There is a cmdlet within the extension called get-datastorefiles.


Basically the full script you would use is:

(new-object net.webclient).DownloadString("http://communities.vmware.com/servlet/JiveServlet/downloadBody/6051-102-1-3481/Extensions.psm1") > $env:temp/Extensions.psm1
add-module $env:temp/Extensions.psm1
get-datastorefiles (get-datastore ds1,ds2,ds3)
 

This will return an array of objects that you can use on the pipeline, etc. Note: This requires the latest PowerShell 2 CTP.

Re: how to list files in datastores?

9. Jun 26, 2008 4:41 AM in response to: benham
Click to view ykalchev's profile Hot Shot 68 posts since
Mar 5, 2008
You can just add the code for one datastore in a loop for each datastore you get:

Get-Datastore <filter> | % {
$ds = Get-View $_.Id

process datastore files here

}

So the script will look smth like this:

Get-Datastore <search criteria> | % {
$ds = Get-View $_.Id

$fileQueryFlags = New-Object VMware.Vim.FileQueryFlags
$fileQueryFlags.FileSize = $true
$fileQueryFlags.FileType = $true
$fileQueryFlags.Modification = $true
$searchSpec = New-Object VMware.Vim.HostDatastoreBrowserSearchSpec
$searchSpec.details = $fileQueryFlags
$searchSpec.sortFoldersFirst = $true
$rootPath = "{0}" -f ($ds.summary.Name)

$dsBrowser = Get-View $ds.browser
$searchResult = $dsBrowser.SearchDatastoreSubFolders($rootPath, $searchSpec)
$fileList = @{}
foreach ($folder in $searchResult) {
foreach ($fileResult in $folder.File) {
$file = "" | select Name, Size, Modified, FullPath
$file.Name = $fileResult.Path
$file.Size = $fileResult.Filesize
$file.Modified = $fileResult.Modification
$file.FullPath = $folder.FolderPath + $file.Name
$fileList.Add($file.FullPath, $file)
}
}
}

$fileList.Values | select Name, Size, Modified, FullPath | export-csv "datastore.csv"

Regards,
Yasen

Re: how to list files in datastores?

11. Aug 6, 2008 2:25 AM in response to: benham
Click to view MorDrakka's profile Novice 20 posts since
Aug 2, 2007

I am trying to create a script that will list all vmdk's on all datastores. This script given here is my starting point. However I cannot make this work.

$ds = Get-Datastore | %{Get-View $_.Id}

Script errors on this. Each time I run this script I get an error like

A parameter cannot be found that matches parameter name 'Datastore-datastore-20029'

At line 18, position 110
$ds = Get-Datastore | %{Get-View $_.Id}

So I am thinking the problem is $_.id is "Datastore-datastore-20029" and Get-view does not recognize this. When I removed $_.I, i received a popup to enter a MoRef.

Anyonhe cahelp me with this? I just need a script that lists all files on a datastore.


Re: how to list files in datastores?

12. Aug 6, 2008 2:41 AM in response to: MorDrakka
Click to view LucD's profile Champion 2,430 posts since
Oct 31, 2005
I suspect you are using VI Toolkit v1 (use Get-VIToolkitversion to check, it should return build 103777).
If yes, the Get-View cmdlet has changed.

Do a Get-Help Get-View to see the new syntax.

PS: try to open a new thread for a new question, it makes it easier for other community members to follow

Re: how to list files in datastores?

13. Aug 6, 2008 2:46 AM in response to: MorDrakka
Click to view rusev's profile Enthusiast 18 posts since
Mar 4, 2008

Hi all,

In VI Toolkit v1.0 there is a datastore provider. This may be very interesting feature to use in some cases. Here is how you can use it:

First you need to mount the datastore provider to some drive:

PS C:\> Get-Datastore -Name "storage1 (3)"| New-DatastoreDrive -Name "ds"

Name Provider Root CurrentLocation
----


----
ds VimDatastore \Datastore\443@10.23.113.41\Data...

Now you can 'cd' to it and do all directory operations you like:

PS C:\> cd ds:
PS ds:\> dir

Datastore path: storage1 (3)

LastWriteTime Type Length Name


----
----
2/25/2008 6:11 PM Folder Win2003 64bit Template
2/24/2008 8:19 AM Folder Win2003 32bit Template
2/24/2008 12:07 AM Folder WinXP 32bit Template
6/16/2008 2:27 PM Folder RedHat 9 Template
2/24/2008 11:10 PM Folder WinXP 64bit Template
6/20/2008 11:57 AM Folder PS20_win2003
8/6/2008 11:15 AM Folder testMachine_Vista_32bit
8/5/2008 5:07 PM Folder testMachine_2003_64bit
8/6/2008 11:25 AM Folder testMachine_XP_64bit
6/6/2008 2:22 PM Folder Ubuntu
6/24/2008 2:29 PM Folder WinVista Business 64b...
8/6/2008 11:00 AM Folder VC4.0


Re: how to list files in datastores?

14. Aug 6, 2008 2:54 AM in response to: LucD
Click to view MorDrakka's profile Novice 20 posts since
Aug 2, 2007

Thanks for reply,

I used this thread because I thought code was the problem.

It is weird though, this morning I installed "VMware-Vim4PS-1.0.0-103777.exe, however Get-ViToolkitversion is not recognised as a cmdlet. I guess I reïnstall everything. Thanks.

VMware Developer

SDKs, APIs, Videos, Learn and much more in the Developer community.

Learn More

Developer Sample Code

Increase your developer productivity with VMware API sample code.

Learn More

VMworld Sessions & Labs

Online access to the latest VMworld Sessions & Labs and online services.

Learn more

Purchase PSO Credits Online

Purchase credits to redeem training and consulting services online.

Buy Now

Community Hardware Software

View reported configurations or report your own.

Learn More

VMware vSphere

Come witness the next giant leap in virtualization.

Register Today

Communities