On a test project I set 3 scenes:

Now, I want to check the name of each scene in the Build:
Scene scene0 = SceneManager.GetSceneByBuildIndex(0);
Debug.Log($"scene0 Name: { scene0.name}");
Scene scene1 = SceneManager.GetSceneByBuildIndex(1);
Debug.Log($"scene1 Name: { scene1.name}");
Scene scene2 = SceneManager.GetSceneByBuildIndex(2);
Debug.Log($"scene2 Name: { scene2.name}");
And I get these empty strings for indexes 1 and 2:

Is this the expected behavior or just a bug? or am I mistaken about how it should work?
The method requires the scenes to be loaded. If not, they won’t work properly.
As always the answers are in the docs: Unity - Scripting API: SceneManagement.SceneManager.GetSceneByBuildIndex
Thank you, I overlooked that one.
will it work with additive scenes?
That’s a quite vague follow up question. Do you mean will it work if the additive scene is not loaded? If that’s the case, I’m pretty sure it would not work either. The SceneManager and the Scene struct tracks loaded scenes only. The Scene struct provides access to the root gameobjects in that scene. That’s impossible if the scene is not loaded.
I haven’t actually tried it, but I’m quite certain that it would not work with additive scenes either, unless loaded.
It only cares whether the scene is loaded or not. This includes if it’s the only scene loaded, or if multiple scenes are loaded.
Sorry I got myself into a mess with the different callbacks there. I was wondering if the “SceneManager.GetActiveScene()” will get also additive scenes (because I’m experimenting with all of the SceneManager callbacks at the moment). But I understand that is off topic. Thank you all for the help.