Windows 10/11 с настройками по-умолчанию блокирует запуск неподписанных PowerShell скриптов. Это означает, что если вы попробуете вручную запустить PS1 файл скрипта или PSM1 модуля из консоли powershell.exe
или pwsh.exe
, появится ошибка:
Невозможно загрузить файл *.PS1, так как выполнение сценариев отключено в этой системе.
File C:\PS\test_script.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.
В Windows возможностью запуска файлов с PowerShell скриптами (расширение *.PS1) ограничивается настройками политики выполнения скриптов (Script Execution Policy).
Текущие настройки политики выполнения PowerShell скриптов на компьютере можно вывести командой:
Get-ExecutionPolicy –List
По умолчанию в Windows запуск PowerShell скриптов блокируется с помощью значения Restricted для области LocalMachine. Остальные четыре области (MachinePolicy, UserPolicy, Process, CurrentUser) не настроены (Undefined). Это означает что в сессии будет применяться политика для области LocalMachine.
Настройки политики Script Execution Policy по умолчанию защищают Windows от запуска потенциально опасного кода в PowerShell скриптах. В большинстве случаев в целях безопасности не рекомендуется изменять настройки политики выполнения скриптов на компьютерах.
Если вам нужно разово запустить файл с PowerShell скриптом, и вы не хотите глобально менять настройки безопасности Windows, временно разрешите запуск скриптов в текущем процессе PowerShell.
Выполните команду:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
Теперь попробуйте выполнить ваш PS1 файл в этой же консоли. PowerShell скрипт должен успешно запустится.
Как вы видите, значение Execution Policy для scope Process изменилось на RemoteSigned. Это тип политики разрешает запуск любых локальных PS1 файлов, но требует наличие доверенной цифровой подписи для всех PowerShell файлов, скачанных их Интернета.
В данном примере мы изменили настройки Execution Policy только для текущего процесса PowerShell. После того, как вы закроете консоль pwsh.exe/powershell.exe, или завершите сессию Windows, запуск скриптов PowerShell будет опять запрещен. Кроме того, этот способ позволит вам переопределить текущие настройки Execution Policy для процесса под пользователей без прав администратора.
Если попытаться изменить настройки политики запуска PowerShell скриптов для области LocalMachine или MachinePolicy под пользователем без прав локального администратора, появится ошибка:
Set-ExecutionPolicy: Access to the path ‘C:\Program Files\PowerShell\7\powershell.config.json’ is denied. To change the execution policy for the default (LocalMachine) scope, start PowerShell with the “Run as administrator” option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".
Если вы планирует запускать PowerShell скрипт из bat файла, или задания планировщика (Task Scheduler), можно обойти настройки Execution Policy.Для этого нужно запустить ваш PowerShell файл в отдельном процессе с параметром executionpolicy RemoteSigned или Bypass.
Powershell.exe -noprofile -executionpolicy bypass -file c:\ps\test_script.ps1
Как вы видите, такая команда позволяет запускать PowerShell скрипт и игнорировать текущие настройки политики.
Если вы хотите разрешать запуск любых локальных PowerShell скриптов в Windows, можно задать политику RemoteSigned для области LocalMachine (это менее безопасный способ!):
Set-ExecutionPolicy –ExecutionPolicy RemoteSigned
При отладке и разработке PowerShell скриптов в среде Visual Studio Code, также будет постоянно появляться ошибка “ps1 cannot be loaded because running scripts is disabled on this system” в Visual Studio Code. В качестве обходного решения нужно добавьте следующие настройки в файл settings.json, которые будут запускать скрипт в режиме Bypass (ctrl + shift + p
-> settings.json
):
"terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "icon": "terminal-powershell", "args": ["-ExecutionPolicy", "Bypass"] } }, "terminal.integrated.defaultProfile.windows": "PowerShell"
Перезапустите среду VSCode.
По-умолчанию настройки Windows запрещают запуск скриптов PowerShell. Это необходимо для предотвращения запуска вредоносного кода на PowerShell. Настройки политик запуска PowerShell скриптов определяются в Execution Policy. В этой статье мы рассмотрим доступные политики запуска PS скриптов, как изменить Execution Policy и настроить политики использования PowerShell скриптов на компьютерах в домене.
Содержание:
- Выполнение PowerShell скриптов запрещено для данной системы
- Как разрешить запуск скриптов PowerShell с помощью Execution Policy?
- Настройка PowerShell Execution Policy с помощью групповых политик
- Способы обхода политики PowerShell Execution
Выполнение PowerShell скриптов запрещено для данной системы
При попытке выполнить PowerShell скрипт (файл с расширением PS1) на чистой Windows 10, появляется ошибка:
File C:\ps\.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170. + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
Не удается загрузить файл.ps1, так как выполнение скриптов запрещено для данной системы.
Текущее значение политики выполнения скриптов PowerShell на компьютере можно получить командой:
Get-ExecutionPolicy
Доступны следующие значения PowerShell Execution Policy:
- Restricted – запрещен запуск скриптов PowerShell, можно выполнять только интерактивные команды в консоли;
- AllSigned – разрешено выполнять только подписанные PS скрипты с цифровой подписью от доверенного издателя (можно подписать скрипт самоподписанным сертификатом и добавить его в доверенные). При запуске недоверенных скриптов появляется предупреждение:
Do you want to run software from this untrusted publisher? File .ps1 is published by CN=test1 and is not trusted on your system. Only run scripts from trusted publishers
- RemoteSigned – можно запускать локальные PowerShell скрипты без ограничения. Можно запускать удаленные PS файлы с цифровой подписью (нельзя запустить PS1 файлы, скачанные из Интернета, запущенные из сетевой папки по UNC пути и т.д.);
- Unrestricted – разрешен запуск всех PowerShell скриптов;
При запуске сторонних PowerShell скриптов может появляется предупреждение с подтверждением запуска, см. ниже.
- Bypass – разрешён запуск любых PS файлов (предупреждения не выводятся) – эта политика обычно используется для автоматического запуска PS скриптов без вывода каких-либо уведомлений (например при запуске через GPO, SCCM, планировщик и т.д.) и не рекомендуется для постоянного использования;
- Default – сброс настроек выполнения скриптов на стандартную;
В Windows 10 значение политики выполнения PowerShell по-умолчанию Restricted, а в Windows Server 2016 — RemoteSigned.
- Undefined – не задано. Применяется политика Restricted для десктопных ОС и RemoteSigned для серверных.
Как разрешить запуск скриптов PowerShell с помощью Execution Policy?
Чтобы изменить текущее значение политики запуска PowerShell скриптов, используется командлет Set-ExecutionPolicy.
Например, разрешим запуск локальных скриптов:
Set-ExecutionPolicy RemoteSigned
Подтвердите изменение политики запуска PS1 скриптов, нажав Y или A.
Чтобы запрос не появлялся, можно использовать параметр Force.
Set-ExecutionPolicy RemoteSigned –Force
Если вы установили значение политики PowerShell Execution Policy в Unrestricted, то при запуске удаленных скриптов из сетевых каталогов по UNC пути, скачанных из интернета файлов, все равно будет появляться предупреждение:
Security warning Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning message. Do you want to run? [D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")
Как PowerShell различает локальные и удаленные скрипты? Все дело в идентификаторе зоны ZoneId, которую выставляет браузер в альтернативном потоке при загрузке файла (см. статью “Как Windows определяет, что файл скачан из Интернета?”). Вы можете разблокировать такой файл, поставив галку “Разблокирвать” в его свойствах или очиститься метку зоны с помощью комадлета Unblock-File.
Также следует различать различные области действия политик выполнения скриптов PowerShell (scopes):
- MachinePolicy – действует для всех пользователей компьютера, настраивается через GPO;
- UserPolicy – действует на пользователей компьютера, также настраивается через GPO;
- Process — настройки ExecutionPolicy действует только для текущего сеанса PowerShell.exe (сбрасываются при закрытии процесса);
- CurrentUser – политика ExecutionPolicy применяется только к текущему пользователю (параметр из ветки реестра HKEY_CURRENT_USER);
- LocalMachine – политика для всех пользователей компьютера (параметр из ветки реестра HKEY_LOCAL_MACHINE);
Область применения политики можно указать с помощью параметр Scope командлета Set-ExecutionPolicy. Например:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force
Проверим текущие настройки ExecutionPolicy для всех областей:
Get-ExecutionPolicy -List
Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Bypass CurrentUser Undefined LocalMachine RemoteSigned
Значение политики выполнения, которые вы задаете с помощью командлета Set-ExecutionPolicy для областей CurrentUser и LocalMachine, хранятся в реестре. Например, выполните командлет:
Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Restricted –Force
Откройте ветку реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell и проверьте значение REG_SZ параметра ExecutionPolicy. Оно изменилось на Restricted (допустимые значения параметра Restricted, AllSigned, RemoteSigned, Bypass, Unrestricted и Undefined).
Аналогичные настройки для области CurrentUser находятся в разделе реестра пользователя HKEY_CURRENT_USER\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell.
Отметим, что чаще всего в корпоративной среде используется ExecutionPolicy со значением AllSigned на уровне LocalMachine. Это обеспечивает максимальный баланс между безопасностью и удобством. Для личного пользования на компьютере можно использовать RemoteSigned. Ну а Bypass политику лучше использовать только для запуска отдельных задач (например для запуска скриптов через GPO или заданий планировщика).
Настройка PowerShell Execution Policy с помощью групповых политик
Вы можете настроить политику выполнения PowerShel скриптов на серверах или компьютерах домена с помощью групповых политик.
- С помощью редактора доменных GPO (gpmc.msc) создайте новую GPO (или отредактируйте) существующую и назначьте ее на OU с компьютерами, к которым нужно применить политику запуска PowerShell скриптов;
- В редакторе политики перейдите в раздел Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Windows PowerShell и найдите политику Turn on Script Execution (Включить выполнение сценариев);
Аналогичная политика есть в пользовательском разделе GPO — User Configuration, но политика компьютера имеет приоритет.
- Для политики доступны три значения:
- Allow only signed scripts (Разрешать только подписанные сценарии) — соответствует политике AllSigned;
- Allow local scripts and remote signed scripts (Разрешать локальные и удаленные подписанные сценарии) — соответствует политике PS RemoteSigned;
- Allow all scripts (Разрешать все сценарии) — политика Unrestricted.
- Выберите необходимое значение политики, сохраните GPO и обновите политики на компьютере.
- Проверьте, что для области MachinePolicy теперь действуют новые настройки выполнения.
После настройки политики выполнения через GPO вы не сможете изменить настройки политики выполнения скриптов вручную. При попытке изменить настройки Execution Policy на компьютере, на который применяется такая GPO, появится ошибка:
Set-ExecutionPolicy : Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List" to view your execution policy settings.
Способы обхода политики PowerShell Execution
Есть несколько трюков, которые могут помочь вам, когда нужно запустить на компьютере PowerShell скрипт, не изменяя настройки политики выполнения. Например, я хочу запустить простой PS1 скрипт, который поверяет, что запущен с правами администратора.
Можно с помощью Get-Content получить содержимое скрипта и перенаправить его в стандартныq поток ввода консоли PS.
Get-Content c:\ps\check_process_elevation.ps1 | PowerShell.exe -noprofile –
Либо можно запустить новый процесс powershell.exe с политикой выполнения Bypass:
powershell.exe -noprofile -executionpolicy bypass -file c:\ps\check_process_elevation.ps1
Trying to run a PowerShell script, and do you get the error “Cannot be loaded because running scripts is disabled on this system”? Then we need to change the execution policy in PowerShell. To protect your computer from malicious scripts, the execution policy of PowerShell is set to restricted by default.
This default setting will prevent you from running any PowerShell script on your computer, even scripts that you have written yourself. Luckily we can easily change the policy with a single command in PowerShell.
In this article
In this article, I will explain how you can quickly fix the error running scripts are disabled on this system, what the different policies are and how to change it on all computers with a Group Policy.
We are going to start with a quick fix. The method below only solves the issue temporarily, so you can run your script and continue. For a more sustainable solution, scroll a bit down to the next chapter.
- Open PowerShell or Windows Terminal
- Enter the command below to run your script
powershell -ExecutionPolicy Bypass -File script.ps1
The method above bypasses the execution policy only temporarily. This works great for a single file, but it requires you to use the command above every time that you want to run the file. A more sustainable solution is to change the execution policy.
Changing the Execution Policy Permanently
When you work a lot with PowerShell scripts then you probably want to change the Execution Policy permanently. But before we look into how to change the policy, let’s first explain its purpose and the different policies that are available.
The execution policy isn’t designed as a security system to restrict users from executing PowerShell scripts. Each user can simply bypass the policy in their current PowerShell session or even copy and paste the content of the script directly into the console. So what is the purpose of the policy then? Well, it’s designed to prevent unintentional execution of PowerShell scripts.
When changing the policy we have five options to choose from:
Execution Policy | Description |
---|---|
Restricted | Default option – Does not allow to run any PowerShell script |
Unrestricted | Can run any script, shows warning for downloaded scripts |
RemoteSigned | Requires a digital signature for downloaded scripts. You can run locally written scripts. You can unblock downloaded scripts to run them without signature |
ByPass | You can run all scripts and no warnings are displayed |
AllSigned | You can only run signed scripts from trusted publishers |
Most people tend to set the policy to unrestricted, which allows you to run any PowerShell script. But a better option is to use the RemoteSigned policy. This way you can run any locally written scripts, but you will have to unblock all downloaded scripts first. The extra handling prevents users from accidentally downloading and running malicious PowerShell scripts on their system.
All users vs Current user
When changing the policy we can also determine the scope of the change. The following scopes are available for the policy:
Scope | Description |
---|---|
CurrentUser | The policy is only set for the currently logged-in user |
LocalMachine | Policy is changed for all users on the machine |
Process | Policy is only changed for the current PowerShell session |
Set Execution Policy for Current user
So the most common scenario is that you want to change the PowerShell Execution policy for the current user. This will solve the error “running scripts is disabled on this system” for the logged-in user. We will set the policy to RemoteSigned, which means that the user still has to perform an extra step for downloaded scripts.
- Open PowerShell
- Enter the command below and press enter
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
- Optional – Verify the setting with the command
Get-ExecutionPolicy
You can now run any locally created PowerShell script without the error running scripts is disabled on this system.
When you try to run a downloaded PowerShell script with the execution policy RemoteSigned, then you get the error that the file cannot be loaded. The PowerShell script is not digitally signed:
To solve this you will first need to unblock the file. To do this we can of course use a PowerShell cmdlet, Unblock-File
. Simply type the cmdlet followed by the filename/path:
Unblock-File -path .\CreateTestFiles.ps1
Set Execution Policy for all Users
We can also change the policy for all users on a computer. To do this, you will need to have elevated permissions (Administrator permission).
- Right-Click on Start or press Windows key + X
- Choose Windows PowerShell (Admin) or Windows Terminal (Admin)
- Type the following command:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
We can verify the results with the cmdlet Get-ExecutionPolicy -List
which shows the policy for each scope. Good to know is that the CurrentUser policy takes precedence over the LocalMachine policy. So when you set the CurrentUser policy to restricted and LocalMachine to RemoteSigned, then the user still can’t execute any PowerShell script, because the policy set in the CurrentUser scope overrules the LocalMachine policy.
Change the policy only for the Current Sessions
Another option is to change the policy only for the current PowerShell session. This method is useful when you need to run a couple of PowerShell scripts, but don’t want to change the policy permanently. You could use the Bypass option for each script, but it’s thus also possible to set change the scope for only the current PowerShell session. Use the scope Process
for this:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
Set Execution policy PowerShell with GPO
When you need to modify the policy on multiple computers, then it’s a good idea to use a Group Policy for this. Group Policies allow you to change Windows settings on multiple computers that are members of a domain. Another advantage of the policy is that the setting can’t be overwritten on the computer.
- Open the Group Policy Management Editor and create a new policy.
- Expand Computer Configuration
- Navigate to Policies > Administrative Templates > Windows Components > Windows PowerShell
- Open the setting Turn on Script Execution
- Change the setting to Enabled
- Select the Execution Policy Allow local scripts and remote signed scripts. This is the same as RemoteSigned that we set earlier.
We can verify the setting on one of the clients that are a member of the OU where we just applied the setting. First, make sure that the latest policy is applied on the computer using the GPUpdate command. Optionally you can use the RSOP command to verify the policy, or just check if the execution policy is set with the command:
Get-ExecutionPolicy -list # Result Scope ExecutionPolicy ----- --------------- MachinePolicy RemoteSigned UserPolicy RemoteSigned Process Undefined CurrentUser Undefined LocalMachine Undefined
As mentioned, the advantage of the policies is that users can’t change the policy anymore. When you use the cmdlet set-executionpolicy, you will get an error that the policy is changed, but the setting is overridden by a policy defined at a more specific scope:
Wrapping Up
The best way to set the Execution Policy in PowerShell is to use the Group Policy. This way all existing and new machines in your domain can be configured with the correct policy. Of course, you can create a different policy for the IT department.
I hope this article helped you to solve the error “cannot be loaded because running scripts is disabled on this system”, if you have any questions, then just drop a comment below. If you want to learn more about PowerShell, then make sure you read this getting started guide.
PowerShell is a tool built into Windows that helps you automate tasks and control different parts of your computer. However, when you try to run PowerShell scripts, you might see an error message saying, “Running scripts is disabled on this system.” This happens because, by default, PowerShell is set to block scripts for security reasons.
In this article, we will explain how PowerShell handles script permissions and show you how to fix this error so you can run scripts.
Understanding PowerShell Execution Policies
PowerShell uses different settings, called execution policies, to control if scripts can run. There are four main policies:
- Restricted: This is the default setting and it blocks all scripts from running. You can still use commands in PowerShell, but no scripts.
- AllSigned: You can run scripts, but only if they are signed by a trusted publisher. Scripts without a signature won’t work.
- RemoteSigned: You can run scripts created on your computer. If you download a script from the internet, it must be signed by a trusted publisher to run.
- Unrestricted: All scripts can run, no matter where they come from or if they are signed. This can be risky, so use this setting carefully.
The error happens when the current PowerShell policy doesn’t allow you to run scripts. I also got the same error when I tried to run a PowerShell script.
Solution:
To fix the “Running scripts is disabled on this system” error, you need to change the execution policy. Here’s how:
- Open PowerShell as an administrator: Click the Start menu, type “PowerShell”, right-click on “Windows PowerShell,” and choose “Run as administrator”.
- Check the current policy: To see what policy is set right now, type this command and press Enter:
Get-ExecutionPolicy
- Change the policy: To allow scripts to run, use the `Set-ExecutionPolicy` command. For example, to set the policy to RemoteSigned, type:
Set-ExecutionPolicy RemoteSigned
When asked to confirm, type “Y” and press Enter.
- Check the new policy: Run `Get-ExecutionPolicy` again to make sure the policy was changed.
- Close and reopen PowerShell to apply the changes.
Note: Changing the policy can affect your system’s security. Be careful which policy you choose, and try to use a setting like RemoteSigned for better security while still allowing scripts to run.
Conclusion
In this article, we talked about PowerShell’s execution policies and how to fix the “Running scripts is disabled on this system” error. By changing the policy, you can run scripts on your computer while keeping it safe. Make sure you only run scripts from trusted sources to avoid security risks. Once you fix the error, you can use PowerShell scripts to automate tasks and manage your system more easily.
Enabling running scripts on Windows 11 is straightforward. First, you’ll need to adjust the execution policy in PowerShell to allow scripts to run. Open PowerShell as an administrator, then use the Set-ExecutionPolicy command followed by the policy level you wish to set. Confirm the changes, and you’ll be good to go.
To get started, we need to change some settings in PowerShell. These steps will guide you through the process, ensuring you can run scripts safely and efficiently on Windows 11.
Step 1: Open PowerShell as Administrator
Right-click the Start button and select «Windows Terminal (Admin).»
Opening PowerShell with administrative privileges is crucial because it allows you to change system settings, which is necessary for enabling script execution.
Step 2: Check Current Execution Policy
In the PowerShell window, type Get-ExecutionPolicy
and press Enter.
This step is essential to understand your current security settings. The execution policy determines the conditions under which PowerShell scripts can run.
Step 3: Set New Execution Policy
Type Set-ExecutionPolicy RemoteSigned
and press Enter.
Setting the execution policy to RemoteSigned means that you can run locally created scripts without any issues, but scripts downloaded from the internet will require a digital signature.
Step 4: Confirm Policy Change
When prompted, type «Y» and press Enter to confirm the policy change.
This step ensures the new policy is applied. If you don’t confirm, the changes won’t take effect, and you won’t be able to run scripts.
Step 5: Verify New Execution Policy
Type Get-ExecutionPolicy
again to confirm the new setting.
Double-checking that the new policy is in place ensures there were no errors in your previous steps, giving you confidence that scripts will now run.
After these steps, you’ll be ready to run scripts on your Windows 11 machine. The execution policy will allow you to run necessary scripts while maintaining some security measures.
Tips for Enabling Running Scripts on Windows 11
- Understand Execution Policies: Know the different execution policies like Restricted, AllSigned, RemoteSigned, and Unrestricted.
- Use RemoteSigned: This is generally the best balance of security and functionality, allowing local scripts to run without signatures.
- Be Cautious with Unrestricted: This setting allows all scripts to run, which can be risky if you’re not careful.
- Regularly Update PowerShell: Ensure you have the latest version to keep your system secure and up-to-date.
- Revert When Needed: If you only need to run a script once, consider setting the execution policy back to Restricted afterward.
Frequently Asked Questions
What are execution policies?
Execution policies are settings that determine how PowerShell runs scripts and whether they require a digital signature.
Is it safe to change the execution policy?
Yes, with caution. Using RemoteSigned is a safe option as it balances functionality and security.
Can I revert the execution policy back?
Yes, you can change it back anytime by using the Set-ExecutionPolicy command with your preferred policy.
What does RemoteSigned mean?
RemoteSigned allows the running of scripts created on your local machine, but scripts from the internet need to be signed by a trusted publisher.
Do I need admin rights to change the execution policy?
Yes, you need to run PowerShell as an administrator to change the execution policy.
Summary
- Open PowerShell as Administrator.
- Check current execution policy.
- Set new execution policy to RemoteSigned.
- Confirm policy change.
- Verify new execution policy.
Conclusion
Enabling running scripts on Windows 11 is a straightforward process that requires changing the execution policy in PowerShell. By following the steps outlined above, you can quickly and safely allow scripts to run on your system. Remember, the RemoteSigned policy strikes a good balance between security and usability, allowing you to run local scripts without hassle.
Changing execution policies gives you the flexibility needed for various tasks, from automation to configuration management. However, always be cautious when running scripts, especially those downloaded from the internet. Ensure they come from trusted sources to avoid any potential security risks.
If you’re looking to dive deeper into PowerShell and its capabilities, there are plenty of resources and community forums available. Happy scripting!
Kermit Matthews is a freelance writer based in Philadelphia, Pennsylvania with more than a decade of experience writing technology guides. He has a Bachelor’s and Master’s degree in Computer Science and has spent much of his professional career in IT management.
He specializes in writing content about iPhones, Android devices, Microsoft Office, and many other popular applications and devices.
Read his full bio here.