VMware Communities > VMTN > VMware vSphere™ > Automation Tools > vSphere™ PowerCLI > Discussions

This Question is Answered

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

how to list files in datastores?

Jun 24, 2008 9:08 PM

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

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.

Reply Re: how to list files in datastores? Jun 25, 2008 1:21 AM
Click to view ykalchev's profile Hot Shot ykalchev 67 posts since
Mar 5, 2008
VMware
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

Reply Re: how to list files in datastores? Jun 25, 2008 1:00 AM
in response to: ykalchev
Click to view benham's profile Novice benham 11 posts since
Feb 26, 2008
VMware

Yasen,

Is that perl or Powershell script? I would like to do with the Powershell VI Toolkit if possible.

Reply Re: how to list files in datastores? Jun 25, 2008 1:18 AM
in response to: benham
Click to view ykalchev's profile Hot Shot ykalchev 67 posts since
Mar 5, 2008
VMware
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
Reply Re: how to list files in datastores? Jun 25, 2008 2:28 AM
in response to: ykalchev
Click to view benham's profile Novice benham 11 posts since
Feb 26, 2008
VMware
Yasen,

Perfect, it works fine except the output is on to screen with repeated header lines.

How can it be modified to write to a CSV file? I tried the export-CSV, it seems that there is only 1 line of output.

Reply Re: how to list files in datastores? Jun 25, 2008 3:58 AM
in response to: benham
Click to view ykalchev's profile Hot Shot ykalchev 67 posts since
Mar 5, 2008
VMware

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

Reply Re: how to list files in datastores? Jun 25, 2008 6:50 AM
Click to view c_shanklin's profile Master c_shanklin 740 posts since
Dec 3, 2007
VMware
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.

Reply Re: how to list files in datastores? Jun 26, 2008 1:33 AM
in response to: ykalchev
Click to view benham's profile Novice benham 11 posts since
Feb 26, 2008
VMware

Perfect, that's what I need. Appreciate it very much. Cheers!
Reply Re: how to list files in datastores? Jun 26, 2008 2:56 AM
in response to: ykalchev
Click to view benham's profile Novice benham 11 posts since
Feb 26, 2008
VMware

How can I loop it, so that I can capture multiple selected datastore? e.g. of certain naming convention type?

Pardon me, I am very new to PowerShell, still trying to learn the basics.

Cheers!

Reply Re: how to list files in datastores? Jun 26, 2008 4:41 AM
in response to: benham
Click to view ykalchev's profile Hot Shot ykalchev 67 posts since
Mar 5, 2008
VMware
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

Reply Re: how to list files in datastores? Jun 26, 2008 7:51 PM
in response to: ykalchev
Click to view benham's profile Novice benham 11 posts since
Feb 26, 2008
VMware

For some reason, some datastore takes a very very long time to generate. Any particular reason?
Reply Re: how to list files in datastores? Aug 6, 2008 2:25 AM
in response to: benham
Click to view MorDrakka's profile Novice MorDrakka 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.


Reply Re: how to list files in datastores? Aug 6, 2008 2:41 AM
in response to: MorDrakka
Click to view LucD's profile Champion LucD 2,384 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
Reply Re: how to list files in datastores? Aug 6, 2008 2:46 AM
in response to: MorDrakka
Click to view rusev's profile Enthusiast rusev 18 posts since
Mar 4, 2008
VMware

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


Reply Re: how to list files in datastores? Aug 6, 2008 2:54 AM
in response to: LucD
Click to view MorDrakka's profile Novice MorDrakka 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.

Actions