I am writing script, where i have requirement to fetch the data as systemObject which has 20 Plus parameter and values, However i need to convert this to array so that i am able to compare it with another object.
Example:
$flag = @()
$RLD_SPOT = get-spotenant
for($i=0;$RLD_SPOT.Length;$i++)
{
if(($RLD_SPOT[$i]) -ne ($curentTenantValue[$i]))
{
$Flag += $currentTenantValue[i]
}
}
Even though I have tried to convert this as Array, whole result stored in $rlds_spot[o]
I am seeking your suggestion to convert this object by breaking each line and store it in array to process later
line 12 should read [$i] at the end
Here’s an example that may help:
This line provides an array of objects:
(System.IO.FileInfo in this case but example applies to any object)
Get-ChildItem .\ -File | select -First 10
To go through that array and execute a command or a script block against each element I can do something like:
Get-ChildItem .\ -File | select -First 10 | foreach {
if ($PSItem.Name -match 'ad') { $PSItem.FullName }
}
This will give me the files that have ‘ad’ in the name. Specifically the file’s full name.
Note that to get the output you simple dump it in the pipeline as in the script block { $PSItem.FullName }
To retain that output in a variable, I can do:
$myOutput = Get-ChildItem .\ -File | select -First 10 | foreach {
if ($PSItem.Name -match 'ad') { $PSItem.FullName }
}
The script block { $PSItem.FullName } can be further developed to produce a more useful output as in:
$myOutput = Get-ChildItem .\ -File | select -First 10 | foreach {
if ($PSItem.Name -match 'ad') {
[PSCustomObject][Ordered]@{
ComputerName = $env:COMPUTERNAME
FileName = $PSItem.FullName
}
}
}
In this case the output is an array of objects, where each element has a ‘ComputerName’ and ‘FileName’ properties:
ComputerName FileName
------------ --------
SAM2017E \\10.0.0.11\e$\Install\Scripts\AD DS Deployment (2).txt
SAM2017E \\10.0.0.11\e$\Install\Scripts\AD DS Deployment.txt
SAM2017E \\10.0.0.11\e$\Install\Scripts\AD-Bla1.ps1
SAM2017E \\10.0.0.11\e$\Install\Scripts\AD-Deployment.txt
SAM2017E \\10.0.0.11\e$\Install\Scripts\AD-PasswordExpired.ps1
SAM2017E \\10.0.0.11\e$\Install\Scripts\AD1.ps1
When i tried to read the value from Object it shows as count “1” but actually it has list of values, which i couldn’t differentiate or split to store in the array, that is the main problem i am facing
$RLD_SPOT = get-spotenant
OR
$jsonIfile = Get-content -Raw "C:\Scripts\SPOTenant.json"
$curentTenantValue = ConvertFrom-Json -InputObject $jsonIfile
Assuming $curentTenantValue and $RLD_SPOT are type ‘string’
$RLD_SPOT = get-spotenant
$flag = 0..($RLD_SPOT.Length-1) | foreach {
if($RLD_SPOT.Chars($PSItem) -ne $curentTenantValue.Chars($PSItem)) {
$curentTenantValue.Chars($PSItem)
}
}
$flag = $flag -join ''
A string is not treated here as an array of characters that you can address as $VariableName[int] for example. However, the string type has a .chars(int) parameterized property that gives you essentially the same functionality…
Example:
$String = 'myString'
$ArrayofChars = 0..($String.Length-1) | foreach { $String.Chars($PSItem) }
$ArrayofChars
$BacktoString = $ArrayofChars -join ''
$BacktoString
Thanks Sam, here is the get-members list
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
BccExternalSharingInvitations Property bool BccExternalSharingInvitations {get;}
BccExternalSharingInvitationsList Property string BccExternalSharingInvitationsList {get;}
CompatibilityRange Property string CompatibilityRange {get;}
DefaultSharingLinkType Property Microsoft.Online.SharePoint.TenantManagement.SharingLinkType DefaultSharingLinkType {get;}
DisallowInfectedFileDownload Property bool DisallowInfectedFileDownload {get;}
DisplayStartASiteOption Property bool DisplayStartASiteOption {get;}
EnableGuestSignInAcceleration Property bool EnableGuestSignInAcceleration {get;}
ExternalServicesEnabled Property bool ExternalServicesEnabled {get;}
FileAnonymousLinkType Property Microsoft.SharePoint.Client.AnonymousLinkType FileAnonymousLinkType {get;}
FolderAnonymousLinkType Property Microsoft.SharePoint.Client.AnonymousLinkType FolderAnonymousLinkType {get;}
IPAddressAllowList Property string IPAddressAllowList {get;}
IPAddressEnforcement Property bool IPAddressEnforcement {get;}
IPAddressWACTokenLifetime Property int IPAddressWACTokenLifetime {get;}
LegacyAuthProtocolsEnabled Property bool LegacyAuthProtocolsEnabled {get;}
NoAccessRedirectUrl Property string NoAccessRedirectUrl {get;}
NotificationsInOneDriveForBusinessEnabled Property bool NotificationsInOneDriveForBusinessEnabled {get;}
NotificationsInSharePointEnabled Property bool NotificationsInSharePointEnabled {get;}
NotifyOwnersWhenInvitationsAccepted Property bool NotifyOwnersWhenInvitationsAccepted {get;}
NotifyOwnersWhenItemsReshared Property bool NotifyOwnersWhenItemsReshared {get;}
ODBAccessRequests Property Microsoft.SharePoint.Client.SharingState ODBAccessRequests {get;}
ODBMembersCanShare Property Microsoft.SharePoint.Client.SharingState ODBMembersCanShare {get;}
OfficeClientADALDisabled Property bool OfficeClientADALDisabled {get;}
OneDriveForGuestsEnabled Property bool OneDriveForGuestsEnabled {get;}
OneDriveStorageQuota Property double OneDriveStorageQuota {get;}
OrphanedPersonalSitesRetentionPeriod Property int OrphanedPersonalSitesRetentionPeriod {get;}
OwnerAnonymousNotification Property bool OwnerAnonymousNotification {get;}
PermissiveBrowserFileHandlingOverride Property bool PermissiveBrowserFileHandlingOverride {get;}
PreventExternalUsersFromResharing Property bool PreventExternalUsersFromResharing {get;}
ProvisionSharedWithEveryoneFolder Property bool ProvisionSharedWithEveryoneFolder {get;}
PublicCdnAllowedFileTypes Property string PublicCdnAllowedFileTypes {get;}
PublicCdnEnabled Property bool PublicCdnEnabled {get;}
PublicCdnOrigins Property System.Collections.Generic.IList[Microsoft.Online.SharePoint.PowerShell.SPOPublicCdnOrigin] PublicCdnOrigins {get;}
RequireAcceptingAccountMatchInvitedAccount Property bool RequireAcceptingAccountMatchInvitedAccount {get;}
RequireAnonymousLinksExpireInDays Property int RequireAnonymousLinksExpireInDays {get;}
ResourceQuota Property double ResourceQuota {get;}
ResourceQuotaAllocated Property double ResourceQuotaAllocated {get;}
SearchResolveExactEmailOrUPN Property bool SearchResolveExactEmailOrUPN {get;}
SharingAllowedDomainList Property string SharingAllowedDomainList {get;}
SharingBlockedDomainList Property string SharingBlockedDomainList {get;}
SharingCapability Property Microsoft.Online.SharePoint.TenantManagement.SharingCapabilities SharingCapability {get;}
SharingDomainRestrictionMode Property Microsoft.Online.SharePoint.TenantManagement.SharingDomainRestrictionModes SharingDomainRestrictionMode {get;}
ShowAllUsersClaim Property bool ShowAllUsersClaim {get;}
ShowEveryoneClaim Property bool ShowEveryoneClaim {get;}
ShowEveryoneExceptExternalUsersClaim Property bool ShowEveryoneExceptExternalUsersClaim {get;}
ShowPeoplePickerSuggestionsForGuestUsers Property bool ShowPeoplePickerSuggestionsForGuestUsers {get;}
SignInAccelerationDomain Property string SignInAccelerationDomain {get;}
SpecialCharactersStateInFileFolderNames Property Microsoft.Online.SharePoint.TenantManagement.SpecialCharactersState SpecialCharactersStateInFileFolderNames {get;}
StartASiteFormUrl Property string StartASiteFormUrl {get;}
StorageQuota Property long StorageQuota {get;}
StorageQuotaAllocated Property long StorageQuotaAllocated {get;}
UseFindPeopleInPeoplePicker Property bool UseFindPeopleInPeoplePicker {get;}
UsePersistentCookiesForExplorerView Property bool UsePersistentCookiesForExplorerView {get;}
UserVoiceForFeedbackEnabled Property bool UserVoiceForFeedbackEnabled {get;}
Hi Sam,
As given above GM list, both are objects which has multiple properties, My objective is to compare each property value with RLD and Current to store the difference for further processing. I don’t want to specify each property like $RLD_SPOT.Property1, $RLD_SPOT.Property2… etc… should be get in to loop and compare one by one.
Thanks,
MKP