Последние статьи
Отчет о еженедельном графике для почтовых ящиков комнат

Один из читателей спросил, можно ли создать еженедельные графики для почтовых ящиков комнат и отправлять их в списки рассылки. В этой статье объясняется, как выполнить эту задачу с помощью PowerShell и запросов Graph API. Раз уж вам удастся получить данные, вы сможете делать что угодно!
Оценка миграции между арендодателями Microsoft 365 Версия 2

В этом блоге Sean Mcavinue рассматривает обновление своей исходной оценки миграции между арендодателями, предназначенной для сбора ключевых данных, которые необходимо учитывать в процессе планирования миграции.
Отчет о файлах SharePoint Online с использованием набора PowerShell SDK Microsoft Graph

Практический PowerShell: Управление потоком

В этом специальном выпуске Practical PowerShell Michel De Rooij рассматривает конструкции управления потоком кода, доступные в PowerShell, касающиеся циклов и способов их использования.
Использование Microsoft AuditLog Query Graph API (Предварительная версия)

Объединенный журнал аудита содержит много информации о арендующем Microsoft 365. Командлет Search-UnifiedAuditLog доступен для поиска журнала аудита, и теперь у нас есть API AuditLog. В этой статье объясняется, как использовать новое API для запроса и извлечения записей аудита из журнала.
Новый взгляд на классический сценарий PowerShell для статистики почтовых ящиков Exchange

Все, кто изучал PowerShell для управления Exchange, вероятно, написали сценарий для отчета о статистике почтовых ящиков Exchange, что означает, что многие сценарии были написаны с 2006 года. В этой статье описывается новый подход к этой теме, который создает хороший HTML-отчет и два списка, которые могут использоваться для другой отчетности.
Практический PowerShell: Функции и параметризация

Во втором выпуске Practical PowerShell Michel De Rooij погружается в Функции и Параметры, что это такое и как их правильно использовать.
Использование Microsoft Graph PowerShell SDK для создания задач планировщика

Настройка задач в планировщике с использованием PowerShell
В прошлом мы описывали, как использовать PowerShell для отчетности о задачах в планах Planner. Эта статья завершает круг обсуждением того, как создавать задачи Planner. В сценарии использования синхронизации уведомлений центра сообщений Microsoft 365 для создания задач в целевом плане есть несколько интересных вопросов для обсуждения, например, как назначить метку задаче.

В этом блоге Джеймс Ипп обзор а использовании PowerShell для изучения подробностей управляемых устройств и установленных приложений на конечных точках.
Дата: 19 марта 2024

Этот блог является первой частью нашей новой ежемесячной серии Практический PowerShell, разработанной для помощи разработчикам PowerShell, работающим на неполный рабочий день, освежить свои навыки написания скриптов.


Миграции между тенантами Microsoft 365 – это не только передача данных! В этом блоге Карин Скапски исследует практические шаги и скрипты для создания цельного визуального брендинга в тенанте Microsoft 365, обеспечивая бесшовный переход как для вашей команды, так и для данных.
Дата: 5 февраля 2024
*****Вы можете найти все подробности об этом объявлении, сделанном Microsoft, здесь.
Microsoft настоятельно рекомендует управлять доступом к ресурсам Azure, используя управление доступом на основе ролей Azure (Azure RBAC) до этой даты и заменить эти классические роли на эквивалентные роли Azure.
Поиск классических администраторов подписки с использованием портала Azure
Затем введите subscriptions в глобальное поле поиска, расположенное в верхней панели, а затем нажмите на Subscriptions в результатах поиска.



Удаление классического администратора подписки с использованием портала Azure



Выполнение действий и использование сценария Azure PowerShell
- Удалить предупреждающие сообщения об изменениях.
- Получить все Azure подписки и сохранить их в переменной.
- Получить и перечислить всех классических администраторов подписок Azure для каждой подписки.
Сценарий Azure PowerShell
Если вы не используете Cloud Shell для запуска сценария, помните войти с помощью командлета Connect-AzAccount, чтобы связать вашу учетную запись Azure. Если у вас есть несколько азурных арендаторов, убедитесь, что вы выбрали правильный перед запуском сценария. Это можно сделать, запустив командлет Set-AzContext -tenantID.
Вы можете затем запустить сценарий.
.\Get-all-Azure-classic-subscription-administrators.ps1Сценарий
Обзор
Сценарий используется для поиска всех администраторов классической подписки Azure из всех подписок Azure арендатора Azure.
Описание
Сценарий используется для поиска всех администраторов классической подписки Azure из всех подписок Azure арендатора Azure.
Сценарий выполнит следующие действия:
Удалить предупреждения о нарушении.
Получить все подписки Azure и сохранить их в переменной.
Получить и перечислить всех администраторов классической подписки Azure для каждой подписки.
Заметки
Имя файла: Get-all-Azure-classic-subscription-administrators.ps1
Создано: 20/03/2024
Последнее изменение: 20/03/2024
Автор: Вим Маттисен
Версия: 1.0
PowerShell: Azure PowerShell и Azure Cloud Shell
Требуется: PowerShell Az (v10.4.1)
Действие: Измените переменные по мере необходимости для удовлетворения ваших потребностей.
Отказ от ответственности: Этот сценарий предоставляется как есть без каких-либо гарантий.
Пример
Connect-AzAccount
Get-AzTenant (если не используется арендатор по умолчанию)
Set-AzContext -tenantID xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx (если не используется арендатор по умолчанию)
.\Get-all-Azure-classic-subscription-administrators.ps1Ссылка
https://wmatthyssen.com/2024/03/21/list-azure-classic-subscription-administrators-via-the-azure-portal-or-via-an-azure-powershell-script/

## Сценарий запущен. Без ошибок это занимает до 1 минуты для завершения
## ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
### Получить все Azure подписки и хранить их в переменной
$ подписки = Get-AzSubscription
## ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
### Получить и перечислить всех администраторов классической подписки Azure для каждой подписки
foreach ($ sub в $ подписках) { Set-AzContext -SubscriptionId $ sub.Id | Out-Null $ classicAdmins = Get-AzRoleAssignment -IncludeClassicAdministrators | Where-Object {$ _.RoleDefinitionName -like * ServiceAdministrator * -or $ _.RoleDefinitionName -like * CoAdministrator *} Write-Output Подписка: $ ($ sub.Name) - $ ($ sub.Id) if ($ classicAdmins) { foreach ($ администратор в $ classicAdmins) { Write-Host ($ writeEmptyLine + # Классический администратор: $ ($ admin.SignInName) + $ SeperatorSpaces + $ currentTime) ` -foregroundcolor $ foregroundColor2 $ writeEmptyLine } } else { Write-Host ($ writeEmptyLine + # Классических администраторов не найдено + $ SeperatorSpaces + $ currentTime) ` Write-Output Классических администраторов не найдено. } Write-Output
}
## ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
### Сценарий завершен
Write-Host (# Сценарий завершен + $ writeSeperatorSpaces + $ currentTime) `
-foregroundcolor $ foregroundColor1 $ writeEmptyLine
## ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Используйте Azure PowerShell, чтобы обнаружить классические ресурсы Application Insights в вашей подписке.
Если вы используете Azure Application Insights, вы могли получить такое письмо от Microsoft:
> **Устаревшие сведения об приложениях будут отключены 29 февраля 2024 года - перейдите на информацию о рабочем пространстве на основе приложений**
> _Вы получили это письмо, потому что вы используете устаревшие сведения об приложениях в Azure Monitor._On 29 February 2024, classic application insights in Azure Monitor will be retired and you’ll need to migrate your resources to workspace-based application insights by that date. As part of this change, beginning 1 September 2023, any new application insights resources you create will be workspace-based. Workspace-based application insights offers improved functionality such as:
- Continuous export of app logs via diagnostic settings.
- The ability to collect data from multiple resources in a single Azure Monitor log analytics workspace.
- Enhanced encryption and optimization with a dedicated cluster.
- New options to reduce costs.
Although most customers’ pricing will remain the same, some may experience a change associated with this migration. Use the Azure pricing calculator to confirm your pricing.
To avoid any disruptions in service, migrate your resources to workspace-based application insights by 29 February 2024.
If so, you’ll need to take action, but how do you find all the Application Insights resources that need updating?
Classic Application Insights is deprecated and will be retired in February 2024.
You’ll notice there’s an odd translation of the IngestionMode property to a string value in the Select-Object cmdlet. This is to catch resources that do not return this property and stop them breaking the Where-Object filter in the next line.
The PowerShell will produce a list of Application Insights resources not using the newer Log Analytics Workspace-based model, giving the name of each resource and it’s Resource Group to enable you to remediate them.
In the Azure portal, my Cloud Service (Extended Support) gets updated pretty frequently and swapped with another Cloud Service (Extended Support) instance. I have a script that uploads the CSPKG, CSDEF, and CSCFG files to blob storage. This works fine.
I then go to the portal, find the instance I want to update, click Update, change to Blob storage, browse to the files I uploaded and click on the update button. This kicks off the process and about 7-9 minutes later the instance is ready to use.
I am trying to replicate this update process in PowerShell, and though it appears that it works, the instance never actually updates. It finds the cloud service just fine. This is what I have put together:
# Get an SAS token to CSPKG Write-Host ("$(Get-Date -f $timeStampFormat) Getting CSPKG Shared Access Signature (SAS) token") -ForegroundColor DarkCyan #$tokenStartTime = Get-Date #$tokenEndTime = $tokenStartTime.AddYears(1) #$cspkgToken = New-AzStorageBlobSASToken -Container “vs-deploy” -Blob “MyCloudService.cspkg” -Permission rwd -StartTime $tokenStartTime -ExpiryTime $tokenEndTime -Context $storageAccount.Context
$cloudService = (Get-AzCloudService) | Where-Object { $_.networkProfile.LoadBalancerConfiguration.FrontendIPConfiguration.PublicIPAddressId -like "*MyIP" }
$stagingServiceName = $cloudService.Name Write-Host ("$(Get-Date -f $timeStampFormat) Deploying to {0} Cloud Service" -f $stagingServiceName) -ForegroundColor DarkCyan
# Load the CSCFG XML into a string from local drive
$cscfgContent = Get-Content $cscfgFilePath | Out-String try { Write-Host "URI for blob: "$cspkgBlob.ICloudBlob.Uri.AbsoluteUri # Update the cloud service $cloudService.PackageUrl = $cspkgBlob.ICloudBlob.Uri.AbsoluteUri $cloudService.Configuration = $cscfgContent $cloudService | Update-AzCloudService } catch { Write-Host ("$(Get-Date -f $timeStampFormat) Cloud Service {0} failed to update: {1}" -f $service, $_.Exception.Message) -ForegroundColor Red break; }
Write-Host ("$(Get-Date -f $timeStampFormat) Finished")First question is: Why is there no mention of the CSDEF file when the portal requires it to update?
Second question: One of the methods I tried required the SAS token but this one doesn’t seem to. Did I miss something?
Third question: I could not find a way to read the CSCFG file from the blob to resorted to reading it from my local drive. What is the proper way to get it from the blob?
Final question: Even though this appears to update, the instance doesn’t change. What am I missing?





