If $ShareAceDetails is null, you won't get anything about that share. Perhaps you should check for that? :P
From: [email protected] [mailto:[email protected]] On Behalf Of Kuhlman, Donald Sent: Thursday, March 27, 2014 4:47 PM To: [email protected] Subject: RE: [NTSysADM] RE: Powershell Tip using get-ace for a share permission Actually, I may have replied too soon on it working. The .ToString() piece is working :) However, now when I run the whole script against a file/print server that has 755 file shares, and I try to read the permissions for the shares, some of them disappear. For example - there are 755 file shares on the server. If I only pull the shares (name, path, description) using " gwmi win32_share -computer myfileserver" it works right and returns all 755 shares. Now in the code that I have, I take the results of the "gwmi win32_share" and start other loops to read each share and get it's permissions. In the loops some of the shares that list via the "gwmi win32_share" code don't show up in the sheet. Some are randomly being dropped. So if I get 755 in the plain call, the loops may only provide 720 of the shares with details. Is anyone aware of a memory or other kind of issue that I'm overlooking that may be causing some to get "lost" from the list when you have a list of items that contains 755 shares or more? Thanks Don K Code snip as it stands now for the share piece is below - TOP OF CODE: $StrComputer = Read-Host "Enter Computer Name " $StrComputerDelim = "\\" + $strComputer $ShareItems = gwmi Win32_Share -Comp $StrComputer .. . . LOOP TO GET THE SHARE AND WRITE THE DETAILS #Populate Shares Sheet Write-host "Populating Share Information for $strComputer" -ForegroundColor Green foreach ($objItem in $ShareItems) { $ShareAceName = $strComputerDelim + "\" + $objItem.Name $ShareAceDetails = get-ace -path $ShareAceName foreach ($ShareAce in $ShareAceDetails) { foreach ($UniqueShare in $ShareAce) { $Sheet7.Cells.Item($intRowShare, 1) = $StrComputer $Sheet7.Cells.Item($intRowShare, 2) = $objitem.Name $Sheet7.Cells.Item($intRowShare, 3) = $objItem.Path $Sheet7.Cells.Item($intRowShare, 4) = $objItem.Description $Sheet7.Cells.Item($intRowShare, 5) = $UniqueShare.FullName $Sheet7.Cells.Item($intRowShare, 6) = $UniqueShare.Account.sid $Sheet7.Cells.Item($intRowShare, 7) = $UniqueShare.Account.AccountName $Sheet7.Cells.Item($intRowShare, 8) = $UniqueShare.AccessRights.ToString() $Sheet7.Cells.Item($intRowShare, 9) = $UniqueShare.AccesscontrolType.ToString() $Sheet7.Cells.Item($intRowShare, 10) = $UniqueShare.InheritanceEnabled $Sheet7.Cells.Item($intRowShare, 11) = $UniqueShare.InheritanceFlags.ToString() $Sheet7.Cells.Item($intRowShare, 12) = $UniqueShare.IsInherited $Sheet7.Cells.Item($intRowShare, 13) = $UniqueShare.PropagationFlags.ToString() $intRowShare = $intRowShare + 1 } } } From: [email protected]<mailto:[email protected]> [mailto:[email protected]] On Behalf Of Tony Patton Sent: Thursday, March 27, 2014 3:07 PM To: [email protected]<mailto:[email protected]> Subject: Re: [NTSysADM] RE: Powershell Tip using get-ace for a share permission I'd be interested, it may be something I have visit shortly for one of our contracts. I currently have scripts running daily to export DNS zones and DFS links. Shares and perms were next on the list but never got around to it. Tony On 27 Mar 2014 18:29, "Kuhlman, Donald" <[email protected]<mailto:[email protected]>> wrote: Thanks much MBS and Kevin. I used the .ToString() and it's running! If anyone is interested I can share the final bits... Don From: [email protected]<mailto:[email protected]> [mailto:[email protected]<mailto:[email protected]>] On Behalf Of Michael B. Smith Sent: Tuesday, March 25, 2014 12:10 PM To: [email protected]<mailto:[email protected]> Subject: [NTSysADM] RE: Powershell Tip using get-ace for a share permission You need a .ToString() in there. $UniqueShare.AccessRights.ToString() From: [email protected]<mailto:[email protected]> [mailto:[email protected]] On Behalf Of Kuhlman, Donald Sent: Tuesday, March 25, 2014 1:01 PM To: [email protected]<mailto:[email protected]> Subject: [NTSysADM] Powershell Tip using get-ace for a share permission * Hi folks. Long time no post...I'm on a new gig and re-subscribed using the email address from here. * I can't find the Powershell info for the IT-Forum groups so I didn't post there yet. I've been googling and checking other sources also, but can't seem to get this to work with what I've found. * Anyway, I'm working on a script to pull a server inventory including shares, share permissions, and other entries and any tip on what may work better or instead of would be really appreciated. I'm able to retrieve the share and ace entries, but when I try to write them to an excel sheet, they aren't coming over with the human readable value like "Read and execute". I can output the info to the screen. I've tried to use a Switch command like this but it doesn't work - # Switch($UniqueShare.AccessRights) # { # 1179817 {$Sheet1.Cells.Item($intRowShare, 7) = "ReadAndExecute"} # } Below is a code snip showing what I'm doing: $strComputer = read-host "Enter computer name " $strComputerDelim = "\\" + $strComputer $sharelist = get-wmiobject win32_share -ComputerName $strComputer foreach ($share in $sharelist) { $ShareAceName = $strComputerDelim + "\" + $share.Name $ShareAceDetails = get-ace -path $ShareAceName foreach ($ShareAce in $ShareAceDetails) { foreach ($UniqueShare in $ShareAce) { #Populate Shares Sheet (This is only a code snippet) write-host $UniqueShare.AccessRights $Sheet1.Cells.Item($intRowShare, 7) = $UniqueShare.AccessRights $Sheet1.Cells.Item($intRowShare, 8) = $ShareAceDetails.AccessControlType $intRowShare = $intRowShare + 1 } } $intRowShare = $intRowShare + 1 } Results on screen are like this for the Permissions: ReadAndExecute, Synchronize FullControl ReadAndExecute, Synchronize ReadAndExecute, Synchronize GenericExecute, GenericRead ReadAndExecute, Synchronize Results in the sheet are like this: Permission 1179817 Thanks, Don K

