Ok, I’m trying to learn, and I usually do that by kludging pieces of other’s code together to make it work for my purposes. What I’d like to do (converting to html or not) is combine specific fields of get-fsrmquota and a query of share info into one ‘report’. while this only looks at 1 computer, I’d like to do it for a list with the option of 1 big output, or 1 output for each computer in the list ala ForEach ($system in Get-Content “c:\temp\systems.txt”
I’m sure there are syntax usage errors in this also (ie, semicolon versus comma)
Any help given is greatly appreciated.
$fileserver = Read-Host “Enter Server Name” $Header = @" TABLE {border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;} TH {border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color: #6495ED;} TD {border-width: 1px;padding: 3px;border-style: solid;border-color: black;} TR:Hover TD {Background-Color: #C1D5F8;} "@ # Quota $quota = Get-FSRMQuota -CimSession $fileserver | select @{name='Backend Server';expression={$_.PSComputerName}},Path,@{n='Quota Size (in GB)';e={[int]($_.Size/1GB)}},@{n='GB Usage';e={[int]($_.Usage/1GB)}} #| Export-csv QuotaOutput.csv -append # Share Permissions # ExportShareInfo.ps1 # This script will export type 0 shares with security info, and provide a hash table of shares # in which security info could not be found. #reference: http://mow001.blogspot.com/2006/05/powershell-export-shares-and-security.html # SID was removed from the script. Instead, the username is used to find SID when the import is run # EricG-thehashtable of problemshares never worked for me $date = get-date $datefile = get-date -uformat '%m-%d-%Y-%H%M%S' #Store shares where security cant be found in this hash table $problemShares = @{} Function Get-ShareInfo($shares) { $arrShareInfo = @() Foreach ($share in $shares) { trap{continue;} write-host $share.name $strWMI = "\\" + $fileServer + "\root\cimv2:win32_LogicalShareSecuritySetting.Name='" + $share.name + "'" $objWMI_ThisShareSec = $null $objWMI_ThisShareSec = [wmi]$strWMI #In case the WMI query or 'GetSecurityDescriptor' fails, we retry a few times before adding to 'problem shares' For($i=0;($i -lt 5) -and ($objWMI_ThisShareSec -eq $null);$i++) { sleep -milliseconds 200 $objWMI_ThisShareSec = [wmi]$strWMI } $objWMI_SD = $null $objWMI_SD = $objWMI_ThisShareSec.invokeMethod('GetSecurityDescriptor',$null,$null) For($j=0;($j -lt 5) -and ($objWMI_SD -eq $null);$j++) { sleep -milliseconds 200 $objWMI_SD = $objWMI_ThisShareSec.invokeMethod('GetSecurityDescriptor',$null,$null) } If($objWMI_SD -ne $null) { $arrShareInfo += $objWMI_SD.Descriptor.DACL | % { $_ | select @{e={$share.name};n='Name'}, @{e={$share.Path};n='Path'}, @{e={$share.Description};n='Description'}, AccessMask, AceFlags, AceType, @{e={$_.trustee.Name};n='User'}, @{e={$_.trustee.Domain};n='Domain'} } } Else { $ProblemShares.Add($share.name, "failed to find security info") } } return $arrshareInfo } $shares = gwmi Win32_Share -computer $fileServer -filter 'type=0' $ShareInfo = Get-ShareInfo($shares) Write-Host " Complete" -ForegroundColor green # not used atm. filter out usernames of "system" and "administrators" # $ShareInfo | select Name,Path,Description,User,Domain,AccessMask,AceFlags,AceType | where user -ne 'system' | where user -ne 'administrators' | export-csv -noType $filename # combine quota and share info $combinedinfo = $quota.@{name='Backend Server'; expression={$quota.PSComputerName}}; $quota.Path; $quota.@{name='Quota Size (in GB)'; expression={[int]($quota_.Size/1GB)}},$quota.@{n='GB Usage'; expression={[int]($quota.Usage/1GB)}}; $ShareInfo.Name; $ShareInfo.Description; $ShareInfo.Domain; $ShareInfo.User; $Shareinfo.AccessMask $tableinfo = New-Object -TypeName psobject -Property $combinedinfo # output ConvertTo-HTML -InputObject $tableinfo -Head $Header -Title "Quota Information" | Out-File "C:\temp\QuotaInfo.htm" Invoke-Item -Path "C:\temp\quotainfo.htm"
Err:
New-Object : Cannot convert ‘System.Object’ to the type ‘System.Collections.IDictionary’ required by parameter ‘Property’. Specified method is not supported.
At \site-it-fs\root\DDOAdmin\Scripts\Powershell\Quota-ShareInfo\Combined_quota-shareinfo-html.ps1:97 char:54
- $tableinfo = New-Object -TypeName psobject -Property $combinedinfo
-
~~~~~~~~~~~~~
- CategoryInfo : InvalidArgument: (
[New-Object], ParameterBindingException
- FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.NewObjectCommand
- CategoryInfo : InvalidArgument: (